前言
在項目開發過程中,經常遇到入庫之前要對數組數據進行 json_encode() 操作,然後使用數據庫工具查看相關數據時,發現對應的json數據中本來是中文字符串的數據變爲了 Unicode 字符串,給查看數據帶來了不便。那麼如果我希望對數據使用了json_encode()處理以後,裏面的中文字符串不變化可以如何做呢?
在 PHP5.4 版本以後,官方更新了 json_encode() 的特性——若希望經過json_encode()處理後的中文字符串不變爲亂碼,可以設置函數的第二個參數爲——JSON_UNESCAPED_UNICODE 。
echo json_encode($arrData, JSON_UNESCAPED_UNICODE);
但是這個新特性只能在 PHP5.4 版本及以上版本使用,對於5.4以下的版本我們可以通過自定義函數來處理。
以下代碼測試環境:
PHP 版本: 5.4.0及以上版本
<?php
/**
* 使用 json_encode() 處理數組時,
* 不對數組裏面的中文字串進行轉義
*
* @param array $arr 待處理數組
* @return string Json格式的字符串
*/
function toJson($arr) {
$ajax = ToUrlencode($arr);
$str_json = json_encode($ajax);
return urldecode($str_json);
}
/**
* 將數組裏面key字串和value字串用urlencode轉換格式後返回
*
* @param array $arr 數組
* @return array
*/
function ToUrlencode($arr) {
$temp = array();
if (is_array($arr)) {
foreach ($arr AS $key => $row) {
//若key爲中文,也需要進行urlencode處理
$key = urlencode($key);
if (is_array($row)) {
$temp[$key] = ToUrlencode($row);
} else {
$temp[$key] = urlencode($row);
}
}
} else {
$temp = $arr;
}
return $temp;
}
/***************************************************************
* 測試代碼
****************************************************************/
$test = array(
'a'=>array(
'中文1'=>'我是測試5',
'中文2'=>'我是測試13',
),
'b'=>'我是測試1',
'c'=>'我是測試2',
'中文'=>'我是測試3',
);
var_dump(toJson($test));
var_dump(json_encode($test, JSON_UNESCAPED_UNICODE));
輸出結果:
string(125) "{"a":{"中文1":"我是測試5","中文2":"我是測試13"},"b":"我是測試1","c":"我是測試2","中文":"我是測試3"}"
string(125) "{"a":{"中文1":"我是測試5","中文2":"我是測試13"},"b":"我是測試1","c":"我是測試2","中文":"我是測試3"}"
歡迎大家一起交流討論,共同進步。
參考鏈接:
https://www.php.net/json_encode/
https://blog.csdn.net/qq_24613517/article/details/81062236
https://blog.csdn.net/a447180126/article/details/17464093