php json 中文问题
php中内置函数json_encode提供把一个array转化为json字符串的功能。网上看到很多人说不能处理中文,这种说法其实是不对的,关键是要看php源文件的编码方式,对于非UTF8的php源文件,中文确实会有问题,反之能正常工作,为什么会这样呢,php手册上说的很清楚
This function only works with UTF-8 encoded data.
对于使用utf8作为文件编码方式的人,可以直接忽视中文问题,那么采用GBK或GB2312的怎么办?要么修改文件的编码方式,往往这个不太显示,总不能为了这个问题把一个项目都修改成UTF-8,另外的一个办法是借助urlencode、urldecode在转换一下,urlencode是把原字符串转换为UTF8格式编码,这就满足了json_encode支持UTF8的需求,而urldecode是把UTF8编码转换成当前字符编码。所以在进行json_encode前先把array中的字符串使用urlencode,然后执行json_encode,接着使用urlencode把json_encode结果进行解码。实例代码如下:
function arrayEncode(&$arr) { foreach ($arr as $k => $v) { if (is_array($v)) { arrayEncode($arr[$k]); } else { $arr[$k] = urlencode($v); } if (is_string($k)) { $nk = urlencode($k); if ($nk != $k) { $arr[$nk] = $arr[$k]; unset($arr[$k]); } } } } function my_json($arr) { arrayEncode($arr); return urldecode(json_encode($arr)); }
欢迎转载,转载请注明文章出处,谢谢!