PHP5.4中json_encode中文转码的变化小结


Posted in PHP onJanuary 30, 2013

在php5.4以前做json_encode的时候中文会被unicode编码,中文都会被编码,变成不可读的,类似“\u***”的格式,还会在一定程度上增加传输的数据量。
例如:

<?php 
$str = '中文'; 
echo json_encode($str); 
//"\u4e2d\u6587" 
php5.4开始 
echo json_encode($str, JSON_UNESCAPED_UNICODE); 
//"中文"

php5.4让json更懂中文!
5.4之前不进行unicode转码,有3种方法处理
但其实前两种方式是会导致问题,在一些特殊的情况下。如下例:
function myjson($code) { 
$code = json_encode(urlencodeAry($code)); 
return urldecode($code); 
} 
function urlencodeAry($data) { 
if(is_array($data)) { 
foreach($data as $key=>$val) { 
$data[$key] = urlencodeAry($val); 
} 
return $data; 
} else { 
return urlencode($data); 
} 
} 
$test = array ( 
0 => '"大连周水子机场"→人民路', 
1 => '运营时间:5:10~21:00 票价:16元 发车间隔20分钟一班,客满随时发车', 
); 
/* 
通过常规则的json_encode|json_decode来编解码 
["\"\u5927\u8fde\u5468\u6c34\u5b50\u673a\u573a\"\u2192\u4eba\u6c11\u8def","\u8fd0\u8425\u65f6 
\u95f4\uff1a5\uff1a10\uff5e21\uff1a00 \u7968\u4ef7\uff1a16\u5143 \u53d1\u8f66\u95f4\u969420 
\u5206\u949f\u4e00\u73ed\uff0c\u5ba2\u6ee1\u968f\u65f6\u53d1\u8f66"] 
array ( 
0 => '"大连周水子机场"→人民路', 
1 => '运营时间:5:10~21:00 票价:16元 发车间隔20分钟一班,客满随时发车', 
) 
*/ 
$test1 = json_encode($test); 
$test2 = json_decode($test1, TRUE); 
echo $test1; 
echo PHP_EOL; 
var_export($test2); 
echo PHP_EOL; 
/* 
通过myjson|json_decode来编解码,但是会出报错json_last_error返回(JSON_ERROR_SYNTAX === 4), 
因为""大连周水子机场"→人民路" 
[""大连周水子机场"→人民路","运营时间:5:10~21:00 票价:16元 发车间隔20分钟一班,客满随时发车"] 
NULL 
*/ 
$test1_1 = myjson($test); 
$test2_1 = json_decode($test1_1, TRUE); 
echo $test1_1; 
echo PHP_EOL; 
var_export($test2_1); 
echo PHP_EOL; 
/* 
通过json_enco+pack|json_decode来编解码,保证不会对中文编码,但是会缺少运营时间数据和票价 
["\"大连周水子机场\"→人民路","运营时间::~: 票价:元 发车间隔分钟一班,客满随时发车"] 
array ( 
0 => '"大连周水子机场"→人民路', 
1 => '运营时间::~: 票价:元 发车间隔分钟一班,客满随时发车', 
) 
*/ 
function replaceUni($str) { 
return preg_replace("#\\\u([0-9a-f]+)#ie", "iconv('UCS-2', 'UTF-8', pack('H4', '\\1'))", $str); 
} 
$test1_2 = replaceUni(json_encode($test)); 
$test2_2 = json_decode($test1_2, TRUE); 
echo $test1_2; 
echo PHP_EOL; 
var_export($test2_2); 
echo PHP_EOL;

最后总结一句,推荐升级到PHP5.4,让PHP更懂中文!
PHP 相关文章推荐
fleaphp下不确定的多条件查询的巧妙解决方法
Sep 11 PHP
php 修改、增加xml结点属性的实现代码
Oct 22 PHP
Smarty局部缓存的几种方法简介
Jun 17 PHP
PHP整合七牛实现上传文件
Jul 03 PHP
实例详解PHP中html word 互转的方法
Jan 28 PHP
完美解决phpdoc导出文档中@package的warning及Error的错误
May 17 PHP
PHP实现打包下载文件的方法示例
Oct 07 PHP
php封装单文件上传到数据库(路径)
Oct 15 PHP
PHP基于imagick扩展实现合成图片的两种方法【附imagick扩展下载】
Nov 14 PHP
PHP图像处理技术实例总结【绘图、水印、验证码、图像压缩】
Dec 08 PHP
Laravel框架下的Contracts契约详解
Mar 17 PHP
PHP中多字节字符串操作实例详解
Aug 23 PHP
PHP读取数据库并按照中文名称进行排序实现代码
Jan 29 #PHP
PHP查询数据库中满足条件的记录条数(两种实现方法)
Jan 29 #PHP
PHP获取数组中某元素的位置及array_keys函数应用
Jan 29 #PHP
有关phpmailer的详细介绍及使用方法
Jan 28 #PHP
PHP输出时间差函数代码
Jan 28 #PHP
PHP调用Linux的命令行执行文件压缩命令
Jan 27 #PHP
php压缩HTML函数轻松实现压缩html/js/Css及注意事项
Jan 27 #PHP
You might like
PHP常用开发函数解析之数组篇[未完结]
2012/07/30 PHP
解析php下载远程图片函数 可伪造来路
2013/06/25 PHP
preg_match_all使用心得分享
2014/01/31 PHP
PHP5.3与5.5废弃与过期函数整理汇总
2014/07/10 PHP
分享自定义的几个PHP功能函数
2015/04/15 PHP
PHP+Mysql基于事务处理实现转账功能的方法
2015/07/08 PHP
document.all还是document.getElementsByName?
2006/07/21 Javascript
lib.utf.js
2007/08/21 Javascript
最佳JS代码编写的14条技巧
2011/01/09 Javascript
js简单实现HTML标签Select联动带跳转
2013/10/23 Javascript
JS运动框架之分享侧边栏动画实例
2015/03/03 Javascript
WEB前端开发框架Bootstrap3 VS Foundation5
2016/05/16 Javascript
基于Echarts 3.19 制作常用的图形(非静态)
2016/05/19 Javascript
浅析jquery数组删除指定元素的方法:grep()
2016/05/19 Javascript
vue引入swiper插件的使用实例
2017/07/19 Javascript
原生JS实现的雪花飘落动画效果
2018/05/03 Javascript
javascript 原型与原型链的理解及实例分析
2019/11/23 Javascript
Express 配置HTML页面访问的实现
2020/11/01 Javascript
[47:18]完美世界DOTA2联赛循环赛 IO vs FTD BO2第一场 11.05
2020/11/06 DOTA
python实现根据ip地址反向查找主机名称的方法
2015/04/29 Python
Python中max函数用法实例分析
2015/07/17 Python
Python正则抓取新闻标题和链接的方法示例
2017/04/24 Python
朴素贝叶斯分类算法原理与Python实现与使用方法案例
2018/06/26 Python
python二维码操作:对QRCode和MyQR入门详解
2019/06/24 Python
python中update的基本使用方法详解
2019/07/17 Python
python Pandas如何对数据集随机抽样
2019/07/29 Python
Python中IP地址处理IPy模块的方法
2019/08/16 Python
Pycharm debug调试时带参数过程解析
2020/02/03 Python
html5理解head_动力节点Java学院整理
2017/07/13 HTML / CSS
高等教育学自荐书范文
2014/02/10 职场文书
《花的勇气》教后反思
2014/02/12 职场文书
计划生育证明格式范本
2014/09/12 职场文书
2014年四风问题自我剖析材料
2014/09/15 职场文书
员工工作能力评语
2014/12/31 职场文书
法学专业求职信范文
2015/03/19 职场文书
公司员工违法违章行为检讨书
2019/06/24 职场文书