我們知道, 用PHP的json_encode來處理中文的時候, 中文都會被編碼, 變成不可讀的, 類似”\u***”的格式, 還會在一定程度上增加傳輸的資料量.
<?php
echo json_encode("中文");
//"\u4e2d\u6587"
這就讓我們這些在天朝做開發的同學, 很是頭疼, 有的時候還不得不自己寫json_encode.
而在PHP5.4, 這個問題終於得以解決, Json新增了一個選項: JSON_UNESCAPED_UNICODE, 故名思議, 就是說, Json不要編碼Unicode.
看下面的例子:
<?php
echo json_encode("中文", JSON_UNESCAPED_UNICODE);
//"中文"
怎麼樣, 是不是讓大家很開心的改動? 呵呵, 當然, Json在5.4還加入了: JSON_BIGINT_AS_STRING, JSON_PRETTY_PRINT, JSON_UNESCAPED_SLASHES等選項
HP5.4才支援JSON_UNESCAPED_UNICODE這個參數,此參數是讓中文字元在json_encode的時候不用轉義,減少資料轉送量。但在PHP5.3中,就得自己寫個函數來實現,以下就是解決方案:
/**
* 對變數進行 JSON 編碼
* @param mixed value 待編碼的 value ,除了resource 類型之外,可以為任何資料類型,該函數只能接受 UTF-8 編碼的資料
* @return string 返回 value 值的 JSON 形式
*/
function json_encode_ex($value)
{
if (version_compare(PHP_VERSION,'5.4.0','<'))
{
$str = json_encode($value);
$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($value, JSON_UNESCAPED_UNICODE);
}
}