很多時候我們都會在開發過程中使用 JSON 格式進行數據傳輸,但是當 JSON 中含有中文時可能會出現亂碼的問題。對于 PHP 開發者來說,解決這個問題其實很簡單,本文就為大家介紹一下 PHP 中如何將含有中文的 JSON 數據進行轉換。
在 PHP 開發中,我們可以使用 json_encode() 函數將數組或對象轉化為 JSON 格式。但是如果數組或對象中包含了中文,它所生成的 JSON 格式字符串會出現類似 “\u4e2d\u6587”的編碼形式,而不是直接輸出中文。因此我們需要對JSON字符串進行解碼處理,將 Unicode 編碼轉為中文。
舉個例子,我們有一個數組,其中包含中文:
// 定義含有中文的 PHP 數組 $data = array( "name" =>"張三", "age" =>20, "gender" =>"男" ); // 對數據進行編碼 $jsonStr = json_encode($data); // 輸出編碼后的 JSON 字符串 echo $jsonStr;此時輸出的 JSON 字符串中,中文會顯示為 Unicode 編碼:
{ "name": "\u5f20\u4e09", "age": 20, "gender": "\u7537" }為了將 JSON 中的 Unicode 編碼轉為中文,我們可以使用 PHP 中的 json_decode() 函數,并指定參數為 true,對 JSON 格式字符串進行解碼(參數為 true 表示將 JSON 轉換為 PHP 的關聯數組)。
// 解碼 JSON 數據,轉化為 PHP 數組形式 $data = json_decode($jsonStr, true); // 輸出解析后的 PHP 數組 print_r($data);這時我們就可以看到中文已經正確輸出了:
Array ( [name] =>張三 [age] =>20 [gender] =>男 )如果不指定解碼參數,就會將 JSON 解析成 PHP 的對象,而不是數組,這時我們需要使用對象的語法訪問屬性:
// 解碼 JSON 數據,轉化為 PHP 對象形式 $obj = json_decode($jsonStr); // 輸出解析后的 PHP 對象 echo $obj->name;這段代碼會輸出“張三”。 除了以上介紹的方法外,我們還可以使用 JSON_UNESCAPED_UNICODE 參數,讓 json_encode() 函數保留中文字符:
// 定義含有中文的 PHP 數組 $data = array( "name" =>"張三", "age" =>20, "gender" =>"男" ); // 對數據進行編碼,保留中文字符 $jsonStr = json_encode($data, JSON_UNESCAPED_UNICODE); // 輸出編碼后的 JSON 字符串 echo $jsonStr;這時輸出的 JSON 字符串就能直接顯示中文字符了:
{ "name": "張三", "age": 20, "gender": "男" }總之,無論是將 JSON 轉為 PHP 數組還是對象,我們都需要使用 PHP 自帶的 json_decode() 函數來解析 JSON。而如果要將 PHP 數組或對象轉為 JSON ,我們則需要調用 json_encode() 函數。在使用 json_encode() 函數時,如果要輸出中文,應該使用 JSON_UNESCAPED_UNICODE 參數進行設置。
上一篇python畫折點圖