文章标签 ‘json_encode中文问’

php json 中文问题

2012年7月11日 没有评论

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));
}

无觅相关文章插件,快速提升流量