當前位置: 首頁> 最新文章列表> PHP中如何解決JSON中文編碼問題

PHP中如何解決JSON中文編碼問題

gitbox 2025-07-26

什麼是PHP中的JSON編碼

JSON 是JavaScript Object Notation(JavaScript 對象表示法)的縮寫,是一種輕量級的數據交換格式。在PHP 中,開發者可以使用內置函數json_encode()將數組或對象轉換為JSON 格式,以便前後端或不同系統間進行數據交互。從PHP 5.2.0 版本開始, json_encode()就被廣泛應用於Web 開發中。

PHP中JSON中文編碼導致亂碼的問題

json_encode()函數處理包含中文的數組或對象時,默認行為會將中文字符轉換為Unicode 編碼。例如:

 
$arr = array('name' => '張三', 'age' => 18, 'gender' => '男');
echo json_encode($arr);
// 輸出結果:{"name":"\u5f20\u4e09","age":18,"gender":"\u7537"}

可以看到中文被轉義成了Unicode 編碼,這在某些情況下會造成顯示亂碼或者不便於閱讀。

解決方法一:使用JSON_UNESCAPED_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是首選;如果不支持,也可以通過手動轉義和解碼的方式實現相同的效果。正確地處理中文編碼問題,能夠提升前後端交互的用戶體驗和數據可讀性。