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 將剛剛的字串轉回來。