JSON 是JavaScript Object Notation(JavaScript 對象表示法)的縮寫,是一種輕量級的數據交換格式。在PHP 中,開發者可以使用內置函數json_encode()將數組或對象轉換為JSON 格式,以便前後端或不同系統間進行數據交互。從PHP 5.2.0 版本開始, json_encode()就被廣泛應用於Web 開發中。
當json_encode()函數處理包含中文的數組或對象時,默認行為會將中文字符轉換為Unicode 編碼。例如:
$arr = array('name' => '張三', 'age' => 18, 'gender' => '男');
echo json_encode($arr);
// 輸出結果:{"name":"\u5f20\u4e09","age":18,"gender":"\u7537"}
可以看到中文被轉義成了Unicode 編碼,這在某些情況下會造成顯示亂碼或者不便於閱讀。
從PHP 5.4.0 版本起, json_encode()函數支持JSON_UNESCAPED_UNICODE選項。使用該選項可以防止中文被轉義,從而保持中文字符的原樣輸出。
$arr = array('name' => '張三', 'age' => 18, 'gender' => '男');
echo json_encode($arr, JSON_UNESCAPED_UNICODE);
// 輸出結果:{"name":"張三","age":18,"gender":"男"}
該方法是最簡潔、推薦的方式,但需要確保服務器的PHP 版本為5.4 及以上。
對於PHP 5.4 以下的版本,可以通過urlencode()和urldecode()方法手動轉義和解碼中文字符來避免亂碼問題:
$arr = array('name' => '張三', 'age' => 18, 'gender' => '男');
$new_arr = array();
foreach($arr as $key => $value) {
$new_arr[$key] = urlencode($value);
}
echo urldecode(json_encode($new_arr));
// 輸出結果:{"name":"張三","age":18,"gender":"男"}
該方法兼容舊版本PHP,雖然略顯繁瑣,但能有效避免中文被轉義的問題。
為了更好地支持中文顯示,開發者可以根據當前所用PHP 版本選擇合適的解決方案。如果版本支持,使用JSON_UNESCAPED_UNICODE是首選;如果不支持,也可以通過手動轉義和解碼的方式實現相同的效果。正確地處理中文編碼問題,能夠提升前後端交互的用戶體驗和數據可讀性。