php實現json_encode()中文字元不轉義
阿新 • • 發佈:2018-12-07
在專案中,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":"測試"}