PHP使用json_encode()時數組裏的中文字符串不轉義

前言

在項目開發過程中,經常遇到入庫之前要對數組數據進行 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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章