位置 : 首页 > 经验分享 > JAVASCRIPT > json_encode后的中文不编码成unicode

json_encode后的中文不编码成unicode

时间:2013-03-12  人气: 收藏
json_encode后的中文不编码成unicode

json_encode后的中文不编码成unicode

 

 

Tags: 编码 , json , 中文

 

 

当使用php自带的json_encode对数据进行编码时,中文都会变成unicode,导致不可读。如:对字符串”厦门“进行json_encode后,输出的是"u53a6u95e8"。

查询了一下,有两种方法:
1.将"u53a6u95e8"还原成“厦门”,使用如下的代码:

$str= preg_replace("#u([0-9a-f]+)#ie", "iconv('UCS-2', 'UTF-8', pack('H4', '1'))", $str);


2.先将中文字段urlencode,json_encode后,再用urldecode,也可以显示中文。

$code = urldecode(json_encode(urlencode("厦门")));


PHP5.4版本,已经给Json新增了一个选项: JSON_UNESCAPED_UNICODE。加上这个选项后,就不会自动把中文编码了。

echo json_encode("厦门", JSON_UNESCAPED_UNICODE);



另,由于 json_encode 和 json_decode只支持utf-8编码的字符,GBK的字符要用json就得转换一下,附自己写的GBK转UTF-8的代码:


/*
    字符串GBK转码为UTF-8,数字转换为数字。
*/
function ct2($s){
    if(is_numeric($s)) {
        return intval($s);
    } else {
        return iconv("GBK","UTF-8",$s);
    }
}
/*
    批量处理gbk->utf-8
*/
function icon_to_utf8($s) {

  if(is_array($s)) {
    foreach($s as $key => $val) {
      $s[$key] = icon_to_utf8($val);
    }
  } else {
      $s = ct2($s);
  }
  return $s;

}

echo json_encode(icon_to_utf8("厦门"));
keywords: json_encode 中文 不编码 unicode


    浏览排行榜
    最新文字信息
返回顶部 关注新浪微博 关注腾讯微博