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 相关文章推荐
PHP4实际应用经验篇(9)
Oct 09 PHP
php 错误处理经验分享
Oct 11 PHP
thinkphp验证码显示不出来的解决方法
Mar 29 PHP
PHP中使用file_get_contents post数据代码例子
Feb 13 PHP
php操作(删除,提取,增加)zip文件方法详解
Mar 12 PHP
php显示指定目录下子目录的方法
Mar 20 PHP
几个优化WordPress中JavaScript加载体验的插件介绍
Dec 17 PHP
高质量PHP代码的50个实用技巧必备(上)
Jan 22 PHP
php文件上传后端处理小技巧
May 22 PHP
Yii2框架使用计划任务的方法
May 25 PHP
thinkPHP连接sqlite3数据库的实现方法(附Thinkphp代码生成器下载)
May 27 PHP
Laravel5中防止XSS跨站攻击的方法
Oct 10 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
用js进行url编码后用php反解以及用php实现js的escape功能函数总结
2010/02/08 PHP
基于MySQL分区性能的详细介绍
2013/05/02 PHP
php中3种方法删除字符串中间的空格
2014/03/10 PHP
php正则判断是否为合法身份证号的方法
2017/03/16 PHP
php操作redis数据库常见方法实例总结
2020/02/20 PHP
TP5框架实现的数据库备份功能示例
2020/04/05 PHP
javascript json 新手入门文档
2009/12/03 Javascript
jQuery 中使用JSON的实现代码
2011/12/01 Javascript
使用jQuery实现星级评分代码分享
2014/12/09 Javascript
jQuery on()绑定动态元素出现的问题小结
2016/02/19 Javascript
JavaScript中的闭包
2016/02/24 Javascript
深入理解js函数的作用域与this指向
2016/05/28 Javascript
基于jQuery实现的幻灯图片切换
2016/12/02 Javascript
angular4实现tab栏切换的方法示例
2017/10/21 Javascript
微信小程序实现点击按钮修改view标签背景颜色功能示例【附demo源码下载】
2017/12/06 Javascript
vue3.0 CLI - 2.5 - 了解组件的三维
2018/09/14 Javascript
使用Python的Supervisor进行进程监控以及自动启动
2014/05/29 Python
Python浅拷贝与深拷贝用法实例
2015/05/09 Python
python实现基于信息增益的决策树归纳
2018/12/18 Python
Python实现计算字符串中出现次数最多的字符示例
2019/01/21 Python
将Python字符串生成PDF的实例代码详解
2019/05/17 Python
使用Python完成15位18位身份证的互转功能
2019/11/06 Python
Python BeautifulReport可视化报告代码实例
2020/04/13 Python
国外最大的眼镜网站:Coastal
2017/08/09 全球购物
带薪年假请假条
2014/02/04 职场文书
采购部部长岗位职责
2014/02/06 职场文书
求职简历自我评价范例
2014/03/12 职场文书
聚美优品励志广告词
2014/03/14 职场文书
保险公司晨会主持词
2014/03/22 职场文书
学校党的群众路线教育实践活动总结报告
2014/07/03 职场文书
爱牙日活动总结
2014/08/29 职场文书
六一儿童节主持开场白
2015/05/28 职场文书
2015选调生工作总结
2015/07/24 职场文书
学生会副主席竞选稿
2015/11/19 职场文书
《艾尔登法环》1.03.3补丁上线 碎星伤害调整
2022/04/07 其他游戏
使用Python解决图表与画布的间距问题
2022/04/11 Python