注: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编码后的内容进行解码,编码后的内容格式:u56feu7247 (原始:图片) 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 = "u7a33u6b65u524du8fdb"; echo unicode_decode($data);
D.json_encode的第二个参数,默认false
当第二个参数默认false,为 TRUE 时,将返回数组,FALSE 时返回对象。