標籤:style http color io os 使用 ar strong sp
網上,針對漢字、特殊字元的UNICODE 編碼、解碼實現,方法諸多,但是大多是複製粘貼,沒有新意!
PHP UNICODE 漢字 編碼:
var_dump(json_encode(‘2018 ABC 我是中國人!網站:http://my.oschina.net/cart/‘));
上述就實現了PHP中對漢字、特殊字元的 UNICODE 編碼!
多麼easy!
上面會輸出:
string(96) ""2018 ABC \u6211\u662f\u4e2d\u56fd\u4eba\uff01\u7f51\u7ad9\uff1ahttp:\/\/my.oschina.net\/cart\/""
PHP UNICODE 漢字 解碼: 如果我們嘗試
var_dump(json_decode(‘2018 ABC \u6211\u662f\u4e2d\u56fd\u4eba\uff01\u7f51\u7ad9\uff1ahttp:\/\/my.oschina.net\/cart\/‘));
或者
var_dump(json_decode("2018 ABC \u6211\u662f\u4e2d\u56fd\u4eba\uff01\u7f51\u7ad9\uff1ahttp:\/\/my.oschina.net\/cart\/")); 結果都是
NULL
是錯誤的,並沒有按照我們的意願解碼!
因為你並沒有傳入正確的json格式字串!!!
心細的同學肯定已經發現,上述json_encode輸出的是
"2018 ABC \u6211\u662f\u4e2d\u56fd\u4eba\uff01\u7f51\u7ad9\uff1ahttp:\/\/my.oschina.net\/cart\/"
注意輸出字串兩段的
雙引號, 這也是輸出 json_encode 內容的一部分!很重要!
所以我們如果想正確的用json_decode解碼,我們以下操作即可:
var_dump(json_decode(‘"2018 ABC \u6211\u662f\u4e2d\u56fd\u4eba\uff01\u7f51\u7ad9\uff1ahttp:\/\/my.oschina.net\/cart\/"‘));
哈哈,正確的解碼輸出了我們的結果:
string(63) "2018 ABC 我是中國人!網站:http://my.oschina.net/cart/"
看看,沒有什麼技術含量,都是基本知識的掌握!但是為什麼國人都想到很多奇葩的方式來解碼呢?基本功不紮實,就只能緣木求魚啦,就算實現了,最後效能還很差!
有的用pack,有的用utf8_decode、mb_convert_encoding、iconv.....
PHP UNICODE 漢字 不規則形式 解碼:
也許有的屌絲沒有那麼幸運,得到的字串形如:
2018 ABC u6211u662fu4e2du56fdu4ebauff01u7f51u7ad9uff1ahttp:\/\/my.oschina.net\/cart\/
怎麼解碼?怎麼破?
心細的同事已經發現,所有的u少了\,應該是\u,u後面跟隨的是【0-9a-f】4位字串!
老衲瀟洒破之(preg_replace的e修飾符在PHP新版本已經棄用了,所以官方推薦使用preg_replace_callback代替之!):
$str = ‘2018 ABC u6211u662fu4e2du56fdu4ebauff01u7f51u7ad9uff1ahttp:\/\/my.oschina.net\/cart\/‘;var_dump(json_decode(‘"‘.preg_replace_callback("/u([0-9a-f]{4})/", function($match){return ‘\u‘.$match[1];}, $str).‘"‘));
就1句話,多麼瀟洒!綠色無汙染,老少皆宜!深藏功與名!
感謝http://my.oschina.net/cart/大神以最優雅的方式完美解決了
PHP 漢字 特殊字元 UNICODE 編碼 解碼 高效能簡潔實現方案!
PHP 漢字 特殊字元 UNICODE 編碼 解碼 高效能簡潔實現方案