PHP使用json_decode转换unicode问题

    PHP提供了一个json_encode函数,如果变量里含有中文时,json_encode会将中文转为unicode格式,但是如何将已经转为unicode格式的中文转换为中文呢?

    前段时间就遇到了这样的问题,在将一些信息以json_encode之后存储到数据库之后,用php从数据库读出编码之后的数据直接进行json_decode,发现中文仍然是unicode编码,

[0] => Array
        (
            [key] => \u767e\u8d27\u7c7b\uff08\u767e\u8d27\u7c7b\u5176\u4ed6\uff09\u666e\u901a\u4f1a\u5458 
            [vip] => 2.6%
            [not_vip] => 1.7%
        )
由于json_decode之后已经是数组了,所以不能直接再json_decode,因此考虑将key指向的unicode编码串取出来之后,再进行解码,但是取出来之后直接进行json_decode确返回空,这是为什么呢?

  分析PHP支持的两种数组,一种是只保存“值”(value)的索引数组(indexedarray),另一种是保存”名值对“(name/value)的关联数组(associate array)。两种数组json_encode之后结果是不一样的。
    对索引数组进行json_encode:

$arr = Array('a', 'b', 'c');
echo json_encode($arr);

  结果为:

["a","b","c"]

 对关联数组进行json_encode:

$arr = Array{
    '1'  => 'a',
    '2'  => 'b',
    '3'  => 'c'
};
echo json_encode($arr);
  结果为:
{"1":"a","2":"b","3":"c"}
    由上可见,关联数组和索引数组json_encode之后结果是不一样的,再回到本文前面的问题,就很清楚了,key所对应的字符串不是json格式,所以json_decode会返回空,那如何处理呢?
    很明显,key对应的字符串这里应该先转成索引数组json_encode之后的格式,再进行json_decode解码即可。下面自己封装一个json_encode函数:
function my_json_decode($str)
{
    if(!$str)
    {
        return $str;
    }
    $res = json_decode($str);
    if($res)
    {
       return $res; 
    }

    $str  = '[“' . $str . '”]';
    return  json_decode($str);
}
    将json_decode替换成自己封装的my_json_decode之后,即可正常解析得到结果!

你可能感兴趣的:(互联网)