Json_encode防止?jié)h字轉(zhuǎn)義成unicode的方法
大家都知道,json_encode通常會(huì)把json中的漢字轉(zhuǎn)義成unicode,但是這并不一定是我們想要的。有時(shí)候,我們需要獲得漢字形式的json字符串,比如需要獲得gbk編碼的json字符串(只要把漢字形式的字符串轉(zhuǎn)碼就可以得到了)。有什么好辦法么?
php官方聽(tīng)到了這個(gè)需求,并提供了一種可靠的解決方案:JSON_UNESCAPED_UNICODE。這個(gè)參數(shù)可以保證json_encode不再將漢字轉(zhuǎn)為unicode。
似乎這樣就解決了?當(dāng)我們高高興興的用這個(gè)參數(shù)的時(shí)候,發(fā)現(xiàn)并沒(méi)有什么卵用。仔細(xì)一看,這個(gè)參數(shù)只有5.4之后的php支持。那更早期的php怎么辦呢?
社區(qū)提供了一種方案:
function my_json_encode($arr){ //convmap since x char codes so it takes all multibyte codes (above ASCII ). So such characters are being "hidden" from normal json_encoding array_walk_recursive($arr, function (&$item, $key) { if (is_string($item)) $item = mb_encode_numericentity($item, array (x, xffff, , xffff), 'UTF-'); }); return mb_decode_numericentity(json_encode($arr), array (x, xffff, , xffff), 'UTF-'); }
不過(guò)這種方法只有5.3才支持,因?yàn)?.2并不支持匿名函數(shù)。至于解決辦法?把匿名函數(shù)定義一下即可。
ps:解決json_encode中文UNICODE轉(zhuǎn)碼問(wèn)題
用PHP的json_encode來(lái)處理中文的時(shí)候, 中文都會(huì)被編碼, 變成不可讀的, 類(lèi)似”\u***”的格式,如果想漢字不進(jìn)行轉(zhuǎn)碼,這里提供三種方法
1.升級(jí)PHP,在PHP5.4, 這個(gè)問(wèn)題終于得以解決, Json新增了一個(gè)選項(xiàng): JSON_UNESCAPED_UNICODE, 故名思議, 就是說(shuō), Json不要編碼Unicode.
<?php echo json_encode("中文", JSON_UNESCAPED_UNICODE); //"中文"
2.把漢字先urlencode然后再使用json_encode,json_encode之后再次使用urldecode來(lái)解碼,這樣編碼出來(lái)的json數(shù)組中的漢字就不會(huì)出現(xiàn)unicode編碼了。
$array = array( 'test'=>urlencode("我是測(cè)試") ); $array = json_encode($array); echo urldecode($array); //{"test":"我是測(cè)試"}
3.對(duì)unicode碼再進(jìn)行解碼,解碼函數(shù)如下:
function decodeUnicode($str) { return preg_replace_callback('/\\\\u([0-9a-f]{4})/i', create_function( '$matches', 'return mb_convert_encoding(pack("H*", $matches[1]), "UTF-8", "UCS-2BE");' ), $str); }
- JS實(shí)現(xiàn)漢字與Unicode碼相互轉(zhuǎn)換的方法詳解
- JS將unicode碼轉(zhuǎn)中文方法
- js 中文漢字轉(zhuǎn)Unicode、Unicode轉(zhuǎn)中文漢字、ASCII轉(zhuǎn)換Unicode、Unicode轉(zhuǎn)換ASCII、中文轉(zhuǎn)換X函數(shù)代碼
- js unicode 編碼解析關(guān)于數(shù)據(jù)轉(zhuǎn)換為中文的兩種方法
- 如何讓Jackson JSON生成的數(shù)據(jù)包含的中文以u(píng)nicode方式編碼
- javascript unicode與GBK2312(中文)編碼轉(zhuǎn)換方法
- 無(wú)語(yǔ),javascript居然支持中文(unicode)編程!
- 解決JSON.stringify()自動(dòng)將中文轉(zhuǎn)譯成unicode的問(wèn)題
- JS實(shí)現(xiàn)的漢字與Unicode碼相互轉(zhuǎn)化功能分析
相關(guān)文章
使用PHP實(shí)現(xiàn)實(shí)時(shí)數(shù)據(jù)可視化功能的示例詳解
實(shí)時(shí)數(shù)據(jù)可視化功能,是指在Web應(yīng)用程序開(kāi)發(fā)中,將服務(wù)器發(fā)送的實(shí)時(shí)數(shù)據(jù),本文將介紹如何使用PHP和前端框架實(shí)現(xiàn)實(shí)時(shí)數(shù)據(jù)可視化功能,需要的可以參考一下2023-07-07PHP實(shí)現(xiàn)一個(gè)限制實(shí)例化次數(shù)的類(lèi)示例
這篇文章主要介紹了PHP實(shí)現(xiàn)一個(gè)限制實(shí)例化次數(shù)的類(lèi),涉及php面向?qū)ο蟪绦蛟O(shè)計(jì)中靜態(tài)對(duì)象與靜態(tài)方法的相關(guān)使用技巧,需要的朋友可以參考下2019-09-09詳解WordPress中簡(jiǎn)碼格式標(biāo)簽編寫(xiě)的基本方法
這篇文章主要介紹了詳解WordPress中簡(jiǎn)碼格式標(biāo)簽編寫(xiě)的基本方法,文中講到了添加和移除簡(jiǎn)碼等的一些PHP函數(shù)的用法,需要的朋友可以參考下2015-12-12