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