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中使用Oracle数据库(5)
Oct 09 PHP
php面向对象全攻略 (七) 继承性
Sep 30 PHP
php中global和$GLOBALS[]的分析之一
Feb 02 PHP
PHP Warning: PHP Startup: Unable to load dynamic library \ D:/php5/ext/php_mysqli.dll\
Jun 17 PHP
php无限分类且支持输出树状图的详细介绍
Jun 19 PHP
浅析关于PHP位运算的简单权限设计
Jun 30 PHP
PHP中的gzcompress、gzdeflate、gzencode函数详解
Jul 29 PHP
PHP中的use关键字及文件的加载详解
Nov 28 PHP
PHP实现截取中文字符串不出现?号的解决方法
Dec 29 PHP
在Laravel 中实现是否关注的示例
Oct 22 PHP
php7 图形用户界面GUI 开发示例
Feb 22 PHP
php使用event扩展的io复用测试的示例
Oct 20 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生成静态页
2006/11/25 PHP
php缓冲 output_buffering和ob_start使用介绍
2014/01/30 PHP
使用php语句将数据库*.sql文件导入数据库
2014/05/05 PHP
php采集中国代理服务器网的方法
2015/06/16 PHP
yii2使用ajax返回json的实现方法
2016/05/14 PHP
jQuery+PHP实现图片上传并提交功能
2020/07/27 PHP
javascript一些实用技巧小结
2011/03/18 Javascript
jQuery中验证表单提交方式及序列化表单内容的实现
2014/01/06 Javascript
JavaScript使用function定义对象并调用的方法
2015/03/23 Javascript
JavaScript弹出新窗口并控制窗口移动到指定位置的方法
2015/04/06 Javascript
Javascript 计算字符串在localStorage中所占字节数
2015/10/21 Javascript
javascript insertAfter()定义与用法示例
2016/07/25 Javascript
使用 bootstrap modal遇到的问题小结
2016/11/09 Javascript
vue实现移动端图片裁剪上传功能
2020/08/18 Javascript
Node错误处理笔记之挖坑系列教程
2018/06/05 Javascript
angular6 填坑之sdk的方法
2018/12/27 Javascript
js+html5 canvas实现ps钢笔抠图
2019/04/28 Javascript
echarts统计x轴区间的数值实例代码详解
2019/07/07 Javascript
JS实现鼠标按下拖拽效果
2020/07/23 Javascript
Python 遍历子文件和所有子文件夹的代码实例
2016/12/21 Python
机器学习经典算法-logistic回归代码详解
2017/12/22 Python
Python网络爬虫中的同步与异步示例详解
2018/02/03 Python
Python创建字典的八种方式
2019/02/27 Python
从多个tfrecord文件中无限读取文件的例子
2020/02/17 Python
python 偷懒技巧——使用 keyboard 录制键盘事件
2020/09/21 Python
paramiko使用tail实时获取服务器的日志输出详解
2020/12/06 Python
matplotlib之pyplot模块坐标轴标签设置使用(xlabel()、ylabel())
2021/02/22 Python
一加手机美国官方网站:OnePlus美国
2019/09/19 全球购物
linux面试题参考答案(11)
2016/11/26 面试题
室内设计专业个人的自我评价
2013/10/19 职场文书
自动化专业毕业生自荐信
2013/11/01 职场文书
2014办公室年度工作总结
2014/12/09 职场文书
退货证明模板
2015/06/23 职场文书
小学主题班会教案
2015/08/17 职场文书
关于vue中如何监听数组变化
2021/04/28 Vue.js
Python实现视频中添加音频工具详解
2021/12/06 Python