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 時返回對象

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM