在使用json_encode时,如果文件不是UTF-8格式并且数组中存在中文,该中文会输出为null
示例代码:
<?php
$brand = array('id'=>'123456','name'=>'中国人');
var_dump(json_encode($brand));
?>
输出结果:
string(27) "{"id":"123456","name":null}"
使用下面这个函数解决了此问题:
<?php
function gbk_to_utf8($data){
if(is_array($data)){
return array_map('gbk_to_utf8', $data);
}
return iconv('gbk','utf-8',$data);
}
?>
示例代码:
<?php
$brand = array('id'=>'123456','name'=>'联想');
var_dump(json_encode(gbk2utf8($brand)));
?>
在json_encode之前做一下gbk2utf8转码,此时输出正确结果:
string(37) "{"id":"123456","name":"\u8054\u60f3"}"
\u8054\u60f3 为“联想”的unicode码,浏览器会自动转换成文字。
注: php的json_encode函数只支持utf-8编码,
若环境不支持的函数mb_convert_encoding ( string mb_convert_encoding ( string $str
, string $to_encoding
[, mixed $from_encoding
= mb_internal_encoding() ] ) ) ,
需检查是否开启了extension=php_mbstring.so (linux下如果缺少这个模块要先用rpm装好)
php的另一个编码转换函数iconv ( string iconv ( string $from_charset
, string $to_charset
, string $str
) ) 经常和mb_convert_encoding互换使用