<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>润物无声 &#187; Json</title>
	<atom:link href="http://blog.zhourunsheng.com/tag/json/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.zhourunsheng.com</link>
	<description>天空一朵雨做的云</description>
	<lastBuildDate>Sat, 08 May 2021 05:17:21 +0000</lastBuildDate>
	<language>zh-CN</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.1.41</generator>
	<item>
		<title>Java PHP Json Mysql 中文乱码问题之解决</title>
		<link>http://blog.zhourunsheng.com/2012/06/java-php-json-mysql-%e4%b8%ad%e6%96%87%e4%b9%b1%e7%a0%81%e9%97%ae%e9%a2%98%e4%b9%8b%e8%a7%a3%e5%86%b3/</link>
		<comments>http://blog.zhourunsheng.com/2012/06/java-php-json-mysql-%e4%b8%ad%e6%96%87%e4%b9%b1%e7%a0%81%e9%97%ae%e9%a2%98%e4%b9%8b%e8%a7%a3%e5%86%b3/#comments</comments>
		<pubDate>Fri, 01 Jun 2012 03:15:55 +0000</pubDate>
		<dc:creator><![CDATA[润物无声]]></dc:creator>
				<category><![CDATA[程序设计]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[Json]]></category>
		<category><![CDATA[Mysql]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[中文乱码]]></category>

		<guid isPermaLink="false">http://blog.zhourunsheng.com/?p=1619</guid>
		<description><![CDATA[<p>问题 客户端采用Java语言编写，服务器端采用PHP语言编写，数据库采用Mysql存储，客户端和服务器之间的交 [&#8230;]</p>
<p><a rel="nofollow" href="http://blog.zhourunsheng.com/2012/06/java-php-json-mysql-%e4%b8%ad%e6%96%87%e4%b9%b1%e7%a0%81%e9%97%ae%e9%a2%98%e4%b9%8b%e8%a7%a3%e5%86%b3/">Java PHP Json Mysql 中文乱码问题之解决</a>，首发于<a rel="nofollow" href="http://blog.zhourunsheng.com">润物无声</a>。</p>
]]></description>
				<content:encoded><![CDATA[<h2>问题</h2>
<p>客户端采用Java语言编写，服务器端采用PHP语言编写，数据库采用Mysql存储，客户端和服务器之间的交互采用Json，在传递英文数据的时候没有问题，当传递中文数据数据的时候，就会出现中文乱码问题，mysql里面的中文全部变成问号了。</p>
<h2>解决方案</h2>
<ul>
<li>Mysql数据库，数据表，数据字段采用统一编码UTF-8, 如 utf8_general_ci</li>
<li>客户端Java字符串转成json格式的时候先进行urlencode处理
<pre>JSONObject jo = new JSONObject();
//jo.accumulate("note", note);
jo.accumulate("note", URLEncoder.encode(note));</pre>
</li>
<li>服务器端PHP转换json格式后，插入数据库前先进行urldecode处理
<pre>$data = array(
    'meta_key' =&gt; 'note',
    //'meta_value' =&gt; $params['note'],
    'meta_value' =&gt; urldecode($params['note']),
);</pre>
</li>
<li>经过以上的步骤处理，可完美解决中文乱码问题</li>
</ul>
<p><a rel="nofollow" href="http://blog.zhourunsheng.com/2012/06/java-php-json-mysql-%e4%b8%ad%e6%96%87%e4%b9%b1%e7%a0%81%e9%97%ae%e9%a2%98%e4%b9%8b%e8%a7%a3%e5%86%b3/">Java PHP Json Mysql 中文乱码问题之解决</a>，首发于<a rel="nofollow" href="http://blog.zhourunsheng.com">润物无声</a>。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.zhourunsheng.com/2012/06/java-php-json-mysql-%e4%b8%ad%e6%96%87%e4%b9%b1%e7%a0%81%e9%97%ae%e9%a2%98%e4%b9%8b%e8%a7%a3%e5%86%b3/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>服务器端API设计之JSONP</title>
		<link>http://blog.zhourunsheng.com/2012/04/%e6%9c%8d%e5%8a%a1%e5%99%a8%e7%ab%afapi%e8%ae%be%e8%ae%a1%e4%b9%8bjsonp/</link>
		<comments>http://blog.zhourunsheng.com/2012/04/%e6%9c%8d%e5%8a%a1%e5%99%a8%e7%ab%afapi%e8%ae%be%e8%ae%a1%e4%b9%8bjsonp/#comments</comments>
		<pubDate>Wed, 18 Apr 2012 07:38:26 +0000</pubDate>
		<dc:creator><![CDATA[润物无声]]></dc:creator>
				<category><![CDATA[移动开发]]></category>
		<category><![CDATA[Ajax]]></category>
		<category><![CDATA[Json]]></category>
		<category><![CDATA[Jsonp]]></category>

		<guid isPermaLink="false">http://blog.zhourunsheng.com/?p=1494</guid>
		<description><![CDATA[<p>最近设计项目的服务器端API，起初的设想是客户端采用XML的格式发送数据，然后服务器端返回JSON格式的数据， [&#8230;]</p>
<p><a rel="nofollow" href="http://blog.zhourunsheng.com/2012/04/%e6%9c%8d%e5%8a%a1%e5%99%a8%e7%ab%afapi%e8%ae%be%e8%ae%a1%e4%b9%8bjsonp/">服务器端API设计之JSONP</a>，首发于<a rel="nofollow" href="http://blog.zhourunsheng.com">润物无声</a>。</p>
]]></description>
				<content:encoded><![CDATA[<p>最近设计项目的服务器端API，起初的设想是客户端采用XML的格式发送数据，然后服务器端返回JSON格式的数据，中间的通信过程采用JS的Ajax机制。</p>
<p>项目初步测试也已通过，功能实现上面倒是没有问题，唯一的缺点就是AJax的跨域通信，想了解更多的关于json，jsonp，ajax和跨域通信的知识可以参照下面的网址：</p>
<ul>
<li><a href="http://zh.wikipedia.org/zh/JSONP">http://zh.wikipedia.org/zh/JSONP</a></li>
<li><a href="http://zh.wikipedia.org/zh/JSON">http://zh.wikipedia.org/zh/JSON</a></li>
<li><a href="http://zh.wikipedia.org/zh/AJAX">http://zh.wikipedia.org/zh/AJAX</a></li>
</ul>
<p><span id="more-1494"></span></p>
<p>现在准备花一点时间，把基于json通信的代码全部迁移为基于jsonp通信，这样就能彻底解决了跨域通信的问题，也更方便API的编写，做了调查和了解之后，发现其实代码的改动非常小，示例代码如下：</p>
<p><strong>服务器端的代码：</strong><br />
1. 客户端传入的xml文件的解析</p>
<pre>private function parseInputData()
{
    $params = array();
    if ( $_SERVER['REQUEST_METHOD'] === 'POST' )
    {
        $input = trim(file_get_contents('php://input'));
        import("@.ORG.Util");
        $params = xml_to_array($input);
    } else {
        $input = trim($_REQUEST['params']);
        import("@.ORG.Util");
        $params = xml_to_array($input);
   }
   return $params;
}</pre>
<p>2. 给客户端返回json/jsonp格式的处理数据</p>
<pre>if(strtoupper($type)=='JSON') {
   if (isset($_REQUEST['callback'])) {
      // 返回JSONP数据格式到客户端
      header('Content-Type:text/javascript; charset=utf-8');
      exit($_REQUEST['callback'] . '(' . json_encode($result) . ');');
   } else {
     // 返回JSON数据格式到客户端
     header('Content-Type: application/x-json; charset=utf-8');
     exit(json_encode($result));
   }
}</pre>
<p><strong>客户端的代码：</strong></p>
<p>1. 向服务器发送数据请求</p>
<p><strong>注意</strong>：注释掉的代码为普通的Ajax的数据请求，返回Json格式的数据，未注释掉的代码则为Jsonp格式的数据请求，可以跨域通信</p>
<pre>/*
    向服务器发送 POST 请求.

    data:   向服务器发送的数据内容
    succcb: 成功时候的回调函数 function(data)
    errcb:  失败时候的回调函数 function(str)
*/
function doPost(data, succcb, errcb)
{
/*   var req = Ext.Ajax.request({
        url: Config.serverapi,
        params: data,
        success: function(response, opts) {
            var str = 'server-side success [' + response.status + '] ' + response.statusText;
            console.log(str);
            try {
               var data = Ext.decode(response.responseText);
               if (data.status == 0) {
                    errcb(data.info);
               } else {
                    succcb(data.data);
               }
            } catch (e) {
                errcb('服务器返回数据格式错误');
            }
        },
       failure: function(response, opts) {
          var str = 'server-side failure [' + response.status + '] ' + response.statusText;
          console.log(str);
          errcb(str);
       }
    });*/

var req = Ext.data.JsonP.request({
      url: Config.serverapi,
      params: {
         'params':data
      },
      callbackKey: 'callback',
      success: function(response) {
          console.log('server-side success !');
          console.dir(response);
          try {
             if (response.status == 0) {
                    errcb(response.info);
             } else {
                    succcb(response.data);
             }
          } catch (e) {
              errcb('服务器返回数据格式错误');
          }
      },
      failure: function(response) {
          var str = 'server-side failure [' + response + '] ';
          console.log(str);
          errcb(str);
       }
    });

   return req;
}</pre>
<p>总结：看过之后，有木有什么发现，实际从json迁移到jsonp是非常简单的，只不过多了一步将json格式的数据利用jsonp的callback函数做了一层封装，仅此改变而已。</p>
<p><a rel="nofollow" href="http://blog.zhourunsheng.com/2012/04/%e6%9c%8d%e5%8a%a1%e5%99%a8%e7%ab%afapi%e8%ae%be%e8%ae%a1%e4%b9%8bjsonp/">服务器端API设计之JSONP</a>，首发于<a rel="nofollow" href="http://blog.zhourunsheng.com">润物无声</a>。</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.zhourunsheng.com/2012/04/%e6%9c%8d%e5%8a%a1%e5%99%a8%e7%ab%afapi%e8%ae%be%e8%ae%a1%e4%b9%8bjsonp/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
	</channel>
</rss>
