网上,针对汉字、特殊字符的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 编码 解码 高性能简洁实现方案!
时间: 2024-10-10 21:11:16