1. 程式人生 > >php實現json_encode()中文字元不轉義

php實現json_encode()中文字元不轉義

在專案中,php提供的介面使用json_encode()函式,在處理中文的時候, 中文都會被編碼成Unicode碼, 變成不可讀的, 類似”\u***”的格式,如果想漢字不進行轉碼,這裡提供三種方法

1.php版本在5.3及以下自己寫函式實現中文不轉義

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);
    }
}
echo json_encode_ex($arr);

2.php版本5.4以上,json_encode()新增了一個選項,JSON_UNESCAPED_UNICODE 意思是json不要unicode編碼

echo json_encode($arr,JSON_UNESCAPED_UNICODE);

3.先把中文漢字進行urlencode然後再使用json_encode,json_encode之後再次使用urldecode來解碼,這樣編碼出來的json陣列中的漢字就不會出現unicode編碼了

$arr = array(
    'key'=>urlencode("測試")
);
$json = json_encode($arr);
echo urldecode($json);
//{"key":"測試"}