json格式只支持 UTF-8 编码,使用 PHP 的 json_encode 对含有中文的对象进行编码的时候会出现中文变成以 \u 开头的 unicode,虽然对输出显示没有太大的影响,但是数据库中却是不能直接看的。

自己网上看了下,基本是两种方法:

1. 使用正则替换,将编码后字符串中的 \uAAAA 等字符串还原为中文,具体就是一句代码 $str= preg_replace("#\\\u([0-9a-f]{4})#ie", "iconv('UCS-2', 'UTF-8', pack('H4', '\\1'))", $str);,其中 pack 是把查找出来的字符串装入二进制的容器,然后使用 iconv 进行转码。

2. 对含有中文的字符进行预处理,使用 urlencode 编码,然后 json_encode,最后再 urldecode,也是可以正常显示中文的。

还有就是在 PHP 5.4 的版本中 json_encode 可以加一个参数 JSON_UNESCAPED_UNICODE,这样就不会编码中文了,echo json_encode("我是中文", JSON_UNESCAPED_UNICODE);

对于这三种方法,最后一种是原生的支持,但兼容行不好,所以应该是以后的趋势,预处理的方法需要编码前后都操作,也是不便的,Alpha 比较推荐第一种方法,而且可以和第三种方法封装为自己的函数,使用 phpversion() 判断版本号,低于 3.4 版本的采用一方法,高的采用三方法。