php json_encode JSON_UNESCAPED_UNICODE


我們知道, 用PHP的json_encode來處理中文的時候, 中文都會被編碼, 變成不可讀的, 類似”\u***”的格式, 還會在一定程度上增加傳輸的數據量.
在數據傳輸的時候不要加
但是在寫入日志的時候,加上 方便直接查看中文

        header('Content-Type: application/json');
        echo json_encode($arrResponse);

        //返回值日志
        Bd_Log::addNotice('bcp_response', json_encode($arrResponse, JSON_UNESCAPED_UNICODE));
<?php
echo json_encode("中文"); //Output: "\u4e2d\u6587"
這就讓我們這些在天朝做開發的同學, 很是頭疼, 有的時候還不得不自己寫json_encode.
?>

而在PHP5.4, 這個問題終於得以解決, Json新增了一個選項: JSON_UNESCAPED_UNICODE, 故名思議, 就是說, Json不要編碼Unicode.

看下面的例子:

<?php
echo json_encode("中文", JSON_UNESCAPED_UNICODE); //Output: "中文"

怎么樣, 是不是讓大家很開心的改動?

呵呵, 當然, Json在5.4還加入了: JSON_BIGINT_AS_STRING, JSON_PRETTY_PRINT, JSON_UNESCAPED_SLASHES等選項, 如果有興趣, 大家可以參看: json_encode

其中有2個比較常用到的參數
JSON_UNESCAPED_UNICODE(中文不轉為unicode ,對應的數字 256)
JSON_UNESCAPED_SLASHES (不轉義反斜杠,對應的數字 64)

通常json_encode只能傳入一個常量,如果同時使用2個常量怎么辦?

JSON_UNESCAPED_UNICODE + JSON_UNESCAPED_SLASHES = 320

使用方法:json_encode($arr,320);即可完成同時使用2個常量。

PHP5.4才支持JSON_UNESCAPED_UNICODE這個參數,此參數是讓中文字符在json_encode的時候不用轉義,減少數據傳輸量。但在PHP5.3中,就得自己寫個函數來實現,以下就是解決方法:

/**
* 對數組變量進行 JSON 編碼
* @param mixed array 待編碼的 array (除了resource 類型之外,可以為任何數據類型,該函數只能接受 UTF-8 編碼的數據)
* @return string (返回 array 值的 JSON 形式)
*/
function json_encode($array)
{
if(version_compare(PHP_VERSION,'5.4.0','<')){
$str = json_encode($array);
$str = preg_replace_callback("#\\u([0-9a-f]{4})#i",function($matchs){
return iconv('UCS-2BE', 'UTF-8', pack('H4', $matchs[1]));
},$str);
return $str;
}else{
return json_encode($array, JSON_UNESCAPED_UNICODE);
}
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM