最近在做一個后端接口的開發工作中,需要用到PHP 的 json_encode 函數將數據轉換成 JSON 格式。但是當我嘗試把一些中文字符轉化成 JSON 格式的時候,卻發現輸出的結果不是我想要的。這時候,我就開始了解 PHP json_encode 中文相關的知識,并學習了一些解決方法。下面,我就來分享一下我的經驗。
使用 json_encode 函數時,需要注意以下幾點:
1. 要求傳入的數據是 UTF-8 編碼的。
2. json_encode 函數默認是不會對中文進行轉碼的。
3. 若需要對中文進行轉碼,需要使用 JSON_UNESCAPED_UNICODE 常量作為第二個參數。
例如,下面是一個最簡單的將數組轉成 JSON 的例子:
$data = array('name' =>'張三', 'age' =>20); echo json_encode($data);如果直接輸出,結果會像這樣: {"name":"\u5f20\u4e09","age":20} 可以看到,此時中文字符被轉成了 Unicode 編碼的形式。如果不希望出現這種情況,需要在代碼中設置第二個參數,將 JSON_UNESCAPED_UNICODE 常量傳遞進去:
$data = array('name' =>'張三', 'age' =>20); echo json_encode($data, JSON_UNESCAPED_UNICODE);這樣輸出的結果就是: {"name":"張三","age":20} 另外,如果需要處理復雜一些的數據,可以先將需要處理的數據轉化成 UTF-8 編碼,并且將中文字符轉化為 Unicode 編碼,再進行 json_encode 操作:
function json_encode_unicode($data) { if (is_array($data) || is_object($data)) { $ret = array(); foreach ($data as $key =>$value) { $new_key = iconv('UTF-8', 'UCS-2', $key); if (is_array($value) || is_object($value)) { $new_value = json_encode_unicode($value); } else { $new_value = iconv('UTF-8', 'UCS-2', $value); } $ret[$new_key] = $new_value; } return json_encode($ret); } }經過上述處理后,就可以得到期望的結果: {"name":"張三","age":20} 總之,在使用 PHP json_encode 函數時,要注意字符編碼問題,對于中文等非 ASCII 字符,要特別注意轉碼的問題,避免出現錯誤的結果。