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


Posted in PHP onAugust 13, 2014

问题背景:
晚上在抓取某网站数据,结果在数据包中发现了这么一串编码的数据:"......\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_unicode_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(次推荐):

<?php
function 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()函数将非法字符格式化为合格字符)

PHP 相关文章推荐
PHP中Session的概念
Oct 09 PHP
用PHP+MySql编写聊天室
Oct 09 PHP
Ajax+PHP 边学边练 之二 实例
Nov 24 PHP
php在多维数组中根据键名快速查询其父键以及父键值的代码
May 07 PHP
ThinkPHP3.1新特性之命名范围的使用
Jun 19 PHP
PHP查询快递信息的方法
Mar 07 PHP
PHP实现简易blog的制作
Oct 24 PHP
ThinkPHP实现生成和校验验证码功能
Apr 28 PHP
php实现的统计字数函数定义与使用示例
Jul 26 PHP
PHP Beanstalkd消息队列的安装与使用方法实例详解
Feb 21 PHP
PHP实现创建一个RPC服务操作示例
Feb 23 PHP
PHP7 其他语言层面的修改
Mar 09 PHP
使用ob系列函数实现PHP网站页面静态化
Aug 13 #PHP
PHP语法自动检查的Vim插件
Aug 11 #PHP
浅谈使用 PHP 进行手机 APP 开发(API 接口开发)
Aug 11 #PHP
Parse正式发布开源PHP SDK
Aug 11 #PHP
Php连接及读取和写入mysql数据库的常用代码
Aug 11 #PHP
Zend Framework 2.0事件管理器(The EventManager)入门教程
Aug 11 #PHP
php向js函数传参的几种方法
Aug 10 #PHP
You might like
PHP利用header跳转失效的解决方法
2014/10/24 PHP
php将图片保存为不同尺寸图片的图片类实例
2015/03/30 PHP
PHP中返回引用类型的方法
2015/04/03 PHP
php验证码生成代码
2015/11/11 PHP
php实现将base64格式图片保存在指定目录的方法
2016/10/13 PHP
不要在cookie中使用特殊字符的原因分析
2010/07/13 Javascript
Jqgrid设置全选(选择)及获取选择行的值示例代码
2013/12/28 Javascript
js实现通用的微信分享组件示例
2014/03/10 Javascript
jQuery实现的简单提示信息插件
2015/12/08 Javascript
Bootstrap多级导航栏(级联导航)的实现代码
2016/03/08 Javascript
Javascript将JSON日期格式化
2016/08/23 Javascript
Angularjs自定义指令实现分页插件(DEMO)
2017/09/16 Javascript
Vue2.0系列之过滤器的使用
2018/03/01 Javascript
vue实现的树形结构加多选框示例
2019/02/02 Javascript
vue2.0项目集成Cesium的实现方法
2019/07/30 Javascript
jQuery表单选择器用法详解
2019/08/22 jQuery
Vue 利用指令实现禁止反复发送请求的两种方法
2019/09/15 Javascript
Python中的__new__与__init__魔术方法理解笔记
2014/11/08 Python
python实现m3u8格式转换为mp4视频格式
2018/02/28 Python
Python使用cx_Oracle模块操作Oracle数据库详解
2018/05/07 Python
Python类的继承用法示例
2019/01/31 Python
详解Python Qt的窗体开发的基本操作
2019/07/14 Python
flask框架jinja2模板与模板继承实例分析
2019/08/01 Python
pytorch 可视化feature map的示例代码
2019/08/20 Python
Python使用Slider组件实现调整曲线参数功能示例
2019/09/06 Python
python读取excel进行遍历/xlrd模块操作
2020/07/12 Python
python中openpyxl和xlsxwriter对Excel的操作方法
2021/03/01 Python
CSS3让登陆面板3D旋转起来
2016/05/03 HTML / CSS
日本最大的购物网站:日本乐天市场(Rakuten Ichiba)
2020/11/04 全球购物
12月红领巾广播稿
2014/02/13 职场文书
工作会议主持词
2014/03/17 职场文书
2014年建筑工作总结
2014/11/26 职场文书
2015年社区党建工作汇报材料
2015/06/25 职场文书
小学运动会加油词
2015/07/18 职场文书
青年联谊会致辞
2015/07/31 职场文书
董事长秘书工作总结
2015/08/14 职场文书