在使用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互換使用