• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

PHP解码unicode编码的中文字符代码分享_PHP

php 搞代码 3年前 (2022-01-25) 13次浏览 已收录 0个评论

问题背景:
晚上在抓取某网站数据,结果在数据包中发现了这么一串编码的数据:”……\u65b0\u6d6a\u5fae\u535a……”, 这其实是中文被unicode编码后了的数据,我现在就是想解码出中文来,上度娘搞了半天,试了很多的姿(方)势(法),终于搞定了。

解决方案:
呵呵,老外就是给力啊, 猛戳这里看老外给的解决方案

方案A(稳定版+推荐):

function replace_unicode_escape_sequence($match) {  return mb_convert_encoding(pack('H*', $match[1]), 'UTF-8', 'UCS-2BE');}$name = '\u65b0\u6d6a\u5fae\u535a';$str = preg_replace_callback('/\\\\u([0-9a-f]{4})/i', 'replace_unico<em style="color:transparent">本文来源[email protected]搞@^&代*@码)网9</em><strong>搞代gaodaima码</strong>de_escape_sequence', $name);echo $str; //输出: 新浪微博 

//咱将上述方案A给封装起来~~~(方案A稳定版+升级+推荐)class Helper_Tool{  static function unicodeDecode($data)  {      function replace_unicode_escape_sequence($match) {      return mb_convert_encoding(pack('H*', $match[1]), 'UTF-8', 'UCS-2BE');    }       $rs = preg_replace_callback('/\\\\u([0-9a-f]{4})/i', 'replace_unicode_escape_sequence', $data);     return $rs;  }  }//调用$name = '\u65b0\u6d6a\u5fae\u535a';$data = Helper_Tool::unicodeDecode($name); //输出新浪微博

方案B(次推荐):

<?phpfunction unicodeDecode($name){  $json = '{"str":"'.$name.'"}';  $arr = json_decode($json,true);  if(empty($arr)) return '';   return $arr['str'];}$name = '\u65b0\u6d6a\u5fae\u535a';echo unicodeDecode($name); //输出: 新浪微博 

对于方案B, 我要特别重点说明下注意事项, 在好友 XAR (猛戳XAR博客) 的技术支持下,总结出要处理的字符串(即传递给函数unicodeDecode的参数$name的内容中一定不能包含单引号,否则就会导致解析失败, 所以有必要的话可以借助 str_replace()函数将非法字符格式化为合格字符)


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:PHP解码unicode编码的中文字符代码分享_PHP
喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址