PHP5.2 新增的 json 功能是非常受欢迎的, 但是经过测试发现, json_encode
对中文的处理是有问题的:
不能处理 GB 编码, 所有的 GB 编码都会替换成空字符;
utf8 编码的中文被编码成 unicode 编码, 相当于 javascript 的 escape 函数
处理的结果
为了能正确使用 json, 首先我们就应该在编码上采用 utf8 编码, 然后再对
json_encode 的返回结果稍加处理就可以得到正确的结果了
PHP 代码
- <?php
- /*PHP5.2 新增的 json 功能是非常受欢迎的, 但是经过测试发现, json_encode
- 对中文的处理是有问题的:
- 不能处理 GB 编码, 所有的 GB 编码都会替换成空字符;
- utf8 编码的中文被编码成 unicode 编码, 相当于 javascript 的 escape 函数
- 处理的结果
- 为了能正确使用 json, 首先我们就应该在编码上采用 utf8 编码, 然后再对
- json_encode 的返回结果稍加处理就可以得到正确的结果了
- 有一个简单的类, 将这两个函数包装了一下:*/
- class Json
- {public static function encode($str)
- {
- $code = json_encode($str);
- return preg_replace("#\\\u([0-9a-f]+)#ie", "iconv('UCS-2','UTF-8', pack('H4','\\1'))", $code);
- }
- public static function decode($str)
- {
- return json_decode($str);
- }
- }
/* 使用的时候
- Json::encode($code);
- Json::decode($code);
这样可以正确处理 utf8 编码的中文了
PS: 对于 GB 编码的中文, 我们可以在编码时先转成 UTF8 编码, 再进行编码
, 解码的时候再进行一个 utf8 ---> gb 的转换就可以了
另外一般 json_encode 的结果我们是返回到客户端来使用, 我们其实还可
以用 javascript 的 unescape 函数来对 unicode 编码的中文进行解码, 从而还原
成正确的中文
或者用:
$title = mb_convert_encoding($title, 'html-ENTITIES', $this-
>_outCharset);*$/ 任意编码下都正常显示
?>
来源: https://www.php1.cn/detail/php-492849cdc0.html