php使用json_encode中遇见问题?

注:php版本5.4下,不支持json_encode对中文的处理,要么升级php版本。

 

json_encode($value,$options)

其中有2个比较常用到的参数:

1.JSON_UNESCAPED_UNICODE(中文不转为unicode ,对应的数字 256

2.JSON_UNESCAPED_SLASHES(不转义反斜杠,对应的数字 64

 

A.数组中存在哪些字符会导致数组json_encode返回false

总结;

1.json_encode 所有字符串数据的编码必须是 UTF-8,不然返回false;

2.如果不是utf-8 可以utf8_encode()处理下;待处理json最大深度默认512,可以 覆盖它$json = json_encode($arr, 0, 1024);可以使用json_last_error_msg查看具体返回false原因

 

B.在gbk的程序中,直接使用json_encode编码包含中文字符的数组,将会返回null。

解决方法是用iconv转换UTF-8后再用encode编码。

代码如下:

function gbk_to_utf8($data) {
        if( is_array($data) ) {
            foreach ($data as $k => $v) {
                if ( is_array($v) ) {
                    $data[$k] = gbk_to_utf8($v);
                } else {
                    $data[$k] = iconv('gbk', 'utf-8', $v);
                }
            }
            return $data;
        } else {
            $data = iconv('gbk', 'utf-8', $data);
            return $data;
        }
}

 

使用方法:

$data = '测试';
echo json_encode(gbk_to_utf8($data));

 

C.若数组中的数据为UNICODE编码,需将UNICODE编码成UTF-8字符串,不然将会返回null。

 1  // 将UNICODE编码后的内容进行解码,编码后的内容格式:\u56fe\u7247 (原始:图片)  
 2     function unicode_decode($name) {  
 3         // 转换编码,将Unicode编码转换成可以浏览的utf-8编码  
 4         $pattern = '/([\w]+)|(\\\u([\w]{4}))/i';  
 5         preg_match_all($pattern, $name, $matches);  
 6         if (!empty($matches))  
 7         {  
 8             $name = '';  
 9             for ($j = 0; $j < count($matches[0]); $j++)  
10             {  
11                 $str = $matches[0][$j];  
12                 if (strpos($str, '\\u') === 0)  
13                 {  
14                     $code = base_convert(substr($str, 2, 2), 16, 10);  
15                     $code2 = base_convert(substr($str, 4), 16, 10);  
16                     $c = chr($code).chr($code2);  
17                     $c = iconv('UCS-2', 'UTF-8', $c);
18                     $name .= $c;  
19                 }  
20                 else  
21                 {  
22                     $name .= $str;  
23                 }  
24             }  
25         }  
26         return $name;  
27     } 

使用方法:

$data = "\u7a33\u6b65\u524d\u8fdb";
echo unicode_decode($data);

D.json_encode的第二个参数,默认false

当第二个参数默认false,为 TRUE 时,将返回数组,FALSE 时返回对象

 

 

posted @ 2018-08-02 14:17  心无引擎,眼无流派  阅读(3040)  评论(0编辑  收藏  举报