json中文编码问题
在和微信接口交互的过程中需要传参json而里面有中文的存在,所以json_encode($data)编码后会形成
{"group":{"name":"2016\u8ba4\u8bc1\u65b0\u5ba2\u6237"}}
的格式 但是这样并不能被用户读懂解析 所以 查找资料后用了 json_encode($data,JSON_UNESCAPED_UNICODE) 这样来处理就可以了,然而实际上在服务器上跑的时候还是遇到问题,JSON_UNESCAPED_UNICODE报错。
仔细查询 发现这个参数是PHP5.4以后才支持解析,而我们服务器php版本5.3只能自己写函数来解析一下
<?php /* * Add by lizhaoyao * Add at 2016-07-07 10:43 * 由于 一般在PHP5.4中对json中中文转码直接用了json_encode($data,JSON_UNESCAPED_UNICODE) * 而 php5.3中 JSON_UNESCAPED_UNICODE 这个值是不存在的 所以要自己写一个兼容函数 * 对变量进行 JSON 编码 * @param mixed value 待编码的 value ,除了resource 类型之外,可以为任何数据类型,该函数只能接受 UTF-8 编码的数据 * @return string 返回 value 值的 JSON 形式 * */ function json_encode_ex( $value) { if ( version_compare( PHP_VERSION,'5.4.0','<')) { $str = json_encode( $value); $str = preg_replace_callback( "#\\\u([0-9a-f]{4})#i", function( $matchs) { return iconv('UCS-2BE', 'UTF-8', pack('H4', $matchs[1])); }, $str ); return $str; } else { return json_encode( $value, JSON_UNESCAPED_UNICODE); } } ?>
然后用函数 json_encode_ex调用就好了
{"group":{"name":"2016认证新客户"}}