PHP 汉字 特殊字符 UNICODE 编码 解码 高性能简洁实现方案

网上,针对汉字、特殊字符的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

PHP 汉字 特殊字符 UNICODE 编码 解码 高性能简洁实现方案的相关文章

winform学习日志(二十八)----------将汉字转化为拼音,正则表达式和得到汉字的Unicode编码

一:上图,不清楚的看代码注解,很详细了 二:具体代码 窗体代码 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Text.RegularExpressio

汉字转为Unicode编码

protected string GetUnicode(string text) { string result = ""; for (int i = 0; i < text.Length; i++) { if ((int)text[i] > 32 && (int)text[i] < 127) { result += text[i].ToString(); } else result += string.Format("\\u{0:x4}&q

php汉字转Unicode编码函数

/** * $str 原始字符串 * $encoding 原始字符串的编码,默认GBK * $prefix 编码后的前缀,默认"&#" * $postfix 编码后的后缀,默认";" */ function unicode_encode($str, $encoding = 'GBK', $prefix = '&#', $postfix = ';') { $str = iconv($encoding, 'UCS-2', $str); $arrstr =

Js汉字和Unicode编码互转 Unicode加密 Unicode解密

<title>汉字和Unicode编码互转</title> <script Language=Javascript> var classObj= { ToUnicode:function(str) { return escape(str).replace(/%/g,"\\").toLowerCase(); }, UnUnicode:function(str) { return unescape(str.replace(/\\/g, "%&q

.Net(c#)汉字和Unicode编码互相转换

{"Tilte": "\u535a\u5ba2\u56ed", "Href": "http://www.cnblogs.com"} 经常遇到这样内容的json字符串,原来是把其中的汉字做了Unicode编码转换. Unicode编码: 将汉字进行UNICODE编码,如:“王”编码后就成了“\王”,UNICODE字符以\u开始,后面有4个数字或者字母,所有字符都是16进制的数字,每两位表示的256以内的一个数字.而一个汉字是由两

Unicode 编码解码

1. Regex.Unescape(str);返回Unicode解码,非Unicode直接返回 /// <summary>      /// 2.转为Unicode编码      /// </summary>      /// <param name="str"></param>      /// <returns></returns>  public static  string ToUnicode(string

Unicode编码解码在线转换工具

Unicode 是基于通用字符集(Universal Character Set)的标准来发展,并且同时也以书本的形式(The Unicode Standard,目前第五版由Addison-Wesley Professional出版,ISBN-10: 0321480910)对外发表. 2006年7月的最新版本的 Unicode 是5.0版本. 2005年3月31日推出的Unicode 4.1.0 .另外,5.0 Beta于2005年12月12日推出,5.2版本(unicode standard)

c# 实现获取汉字十六进制Unicode编码字符串

1.  汉字转十六进制UNICODE编码字符串 /// <summary>        /// ////        /// </summary>        /// <param name="character"></param>        /// <returns></returns>        public string CharacterToCoding(string character)  

Asp.Net \uxxx Unicode编码解码

/// <summary> /// Unicode编码 /// </summary> /// <param name="str"></param> /// <returns></returns> public static string EnUnicode(string str) { StringBuilder strResult = new StringBuilder(); if (!string.IsNullO