<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,导致不可读。如:对字符串”厦门“进行json_encode后,输出的是"u53a6u95e8"。<br />
<br />
查询了一下,有两种方法:<br />
1.将"u53a6u95e8"还原成“厦门”,使用如下的代码:</p>
<div class="code" >$str= preg_replace("#u([0-9a-f]+)#ie", "iconv('UCS-2', 'UTF-8', pack('H4', '1'))", $str);</div>
<p><br />
<span >2.先将中文字段urlencode,json_encode后,再用urldecode,也可以显示中文。</span></p>
<div class="code" >$code = urldecode(json_encode(urlencode("厦门")));</div>
<p><br />
<span >PHP5.4版本,已经给Json新增了一个选项: JSON_UNESCAPED_UNICODE。加上这个选项后,就不会自动把中文编码了。</span></p>
<div class="code" >echo json_encode("厦门", 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("GBK","UTF-8",$s);<br />
}<br />
}<br />
/*<br />
批量处理gbk->utf-8<br />
*/<br />
function icon_to_utf8($s) {<br />
<br />
if(is_array($s)) {<br />
foreach($s as $key => $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("厦门"));</div>