php json_encode 中文不转码
1,在PHP>=5.4.0 的版本已经可以直接通过json_encode函数本身来解决。那就是第二个参数加上JSON_UNESCAPED_UNICODE。
2,我们知道,在PHP中有两个函数 urlencode 和 urldecode。我们可以通过urlencode函数将中文进行url编码,这样在字符串中就不会再有中文,也就不会遇到中文编码的问题。
3,先json_encode()在解决中文UNICODE转码问题。你需要一个UNICODE转码转中文函数:
|
|
function decodeUnicode($str) { return preg_replace_callback('/\\\\u([0-9a-f]{4})/i', create_function( '$matches', 'return mb_convert_encoding(pack("H*", $matches[1]), "UTF-8", "UCS-2BE");' ), $str); } |
有了这个函数后,你就可以这样做了 :
|
|
$arr = array('name1':"中文",'name2':'abc12'); $jsonstr = decodeUnicode(json_encode($arr));//先转json ,再处理中文UNICODE转码问题 |
当然,你可以将上边两步封装成一步,直接封装一个 json_encode_ex();函数。
-
-
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
|
/** * 对变量进行 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); } } |
过于复杂:如果只为存储日志,可以考虑使用序列化函数serialize。
- 来源:http://www.lrxin.com/archives-1029.html
「三年博客,如果觉得我的文章对您有用,请帮助本站成长」
共有 0 - PHP的字符编码