<p><strong>json_encode后的中文不编码成unicode</strong></p> <div class="textbox-fontsize" ></div> <p></p> <div class="tags2" >Tags:<span class="Apple-converted-space"></span>编码<span class="Apple-converted-space"></span>,<span class="Apple-converted-space"></span>json<span class="Apple-converted-space"></span>,<span class="Apple-converted-space"></span>中文</div> <p></p> <p ></p> <p >当使用php自带的json_encode对数据进行编码时,中文都会变成unicode,导致不可读。如:对字符串&rdquo;厦门&ldquo;进行json_encode后,输出的是&quot;u53a6u95e8&quot;。<br /> <br /> 查询了一下,有两种方法:<br /> 1.将&quot;u53a6u95e8&quot;还原成&ldquo;厦门&rdquo;,使用如下的代码:</p> <div class="code" >$str= preg_replace(&quot;#u([0-9a-f]+)#ie&quot;, &quot;iconv(&#39;UCS-2&#39;, &#39;UTF-8&#39;, pack(&#39;H4&#39;, &#39;1&#39;))&quot;, $str);</div> <p><br /> <span >2.先将中文字段urlencode,json_encode后,再用urldecode,也可以显示中文。</span></p> <div class="code" >$code = urldecode(json_encode(urlencode(&quot;厦门&quot;)));</div> <p><br /> <span >PHP5.4版本,已经给Json新增了一个选项: JSON_UNESCAPED_UNICODE。加上这个选项后,就不会自动把中文编码了。</span></p> <div class="code" >echo json_encode(&quot;厦门&quot;, JSON_UNESCAPED_UNICODE);</div> <p><br /> <br /> <span >另,由于 json_encode 和 json_decode只支持utf-8编码的字符,GBK的字符要用json就得转换一下,附自己写的GBK转UTF-8的代码:</span></p> <div class="code" ><br /> /*<br /> 字符串GBK转码为UTF-8,数字转换为数字。<br /> */<br /> function ct2($s){<br /> if(is_numeric($s)) {<br /> return intval($s);<br /> } else {<br /> return iconv(&quot;GBK&quot;,&quot;UTF-8&quot;,$s);<br /> }<br /> }<br /> /*<br /> 批量处理gbk-&gt;utf-8<br /> */<br /> function icon_to_utf8($s) {<br /> <br /> if(is_array($s)) {<br /> foreach($s as $key =&gt; $val) {<br /> $s[$key] = icon_to_utf8($val);<br /> }<br /> } else {<br /> $s = ct2($s);<br /> }<br /> return $s;<br /> <br /> }<br /> <br /> echo json_encode(icon_to_utf8(&quot;厦门&quot;));</div>
返回顶部 留言