用 PHP 的 json_encode 來處理中文的時候,中文都會被編碼,變成不可讀的,類似”\u***”的格式,有時候網頁上也會直接顯示null,最主要的原因是為了與前端緊密結合, json 只支援 utf8,如果想要讓中文不進行轉碼,這裡提供兩種簡單方法
1. 在PHP5.4, 這個問題終於得以解決, Json 新增了一個選項: JSON_UNESCAPED_UNICODE, 故名思議, 就是說, Json不要編碼Unicode, 那就不會有中文亂碼的問題了。
echo json_encode("中文", JSON_UNESCAPED_UNICODE);
2. 把中文先 urlencode 然後再使用 json_encode, json_encode 之後再次使用 urldecode 來解碼,這樣編碼出來的 json 中的中文就不會出現 unicode 編碼了。
這裡我提供一個尋訪 array 中 vlaue 為 string 的變數,幫這些變數加上這種機制。
測試的結果:
//Convent to json format directly
$data = array(
'title' => '惡靈古堡',
'year' => 2012
);
$json = json_encode($data);
echo "$json
";
//Use urlencode to workaround for json_encode without JSON_UNESCAPED_UNICODE
array_walk_recursive($data, function(&$value, $key) {
if(is_string($value)) {
$value = urlencode($value);
}
});
$json = urldecode(json_encode($data));
echo "$json
";
{"title":null,"year":2012}
{"title":"惡靈古堡","year":2012}
這個原理很簡單,因為只有中文會讓 json_encode 出現亂碼,那麼我們先用 urlencode 讓字串不會有中文,當被編碼後的字串被 json_encode 處理過後,再利用 urldecode 將剛剛的字串轉回來。
上述那個array_walk_recursive用法會錯誤!!
回覆刪除Parse error: syntax error, unexpected T_FUNCTION in ......
改成
function test_print(&$value, $key) {
if(is_string($value)) {
$value = urlencode($value);
}
}
array_walk_recursive($data, 'test_print');
這樣子才不會有錯誤!!
請問你是指 Anonymous Function的問題嗎
刪除假如是這個的話,在新版的php已經有支援了
還是你是說其他的地方呢?
還不錯的筆記~
回覆刪除