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中实现动态代理
Oct 09 PHP
一步一步学习PHP(1) php开发环境配置
Feb 15 PHP
PHP中的array数组类型分析说明
Jul 27 PHP
php学习笔记之 函数声明
Jun 09 PHP
php防注入,表单提交值转义的实现详解
Jun 10 PHP
解析file_get_contents模仿浏览器头(user_agent)获取数据
Jun 27 PHP
PHP超全局数组(Superglobals)介绍
Jul 01 PHP
PHP基于单例模式编写PDO类的方法
Sep 13 PHP
php基于SQLite实现的分页功能示例
Jun 21 PHP
Laravel模型事件的实现原理详解
Mar 14 PHP
PHP实现数组向任意位置插入,删除,替换数据操作示例
Apr 05 PHP
PHP程序员必须知道的两种日志实例分析
May 14 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使用cookie显示用户上次访问网站日期的方法
2015/01/26 PHP
WordPres对前端页面调试时的两个PHP函数使用小技巧
2015/12/22 PHP
JavaScript判断两种格式的输入日期的正确性的代码
2007/03/25 Javascript
从数据结构的角度分析 for each in 比 for in 快的多
2013/07/07 Javascript
Javascript事件实例详解
2013/11/06 Javascript
原生javascript模仿win8等待提示圆圈进度条
2014/04/24 Javascript
JS实现带鼠标效果的头像及文章列表代码
2015/09/27 Javascript
Javascript获取统一管理的提示语(message)
2016/02/03 Javascript
悬浮广告方法日常收集整理
2016/03/18 Javascript
ES6新特性之数组、Math和扩展操作符用法示例
2017/04/01 Javascript
浅谈struts1 &amp; jquery form 文件异步上传
2017/05/25 jQuery
js实现前端图片上传即时预览功能
2017/08/02 Javascript
原生JS实现循环Nodelist Dom列表的4种方式示例
2018/02/11 Javascript
vue中实现动态生成二维码的方法
2020/02/21 Javascript
JavaScript鼠标拖拽事件详解
2020/04/03 Javascript
JS Thunk 函数的含义和用法实例总结
2020/04/08 Javascript
vue基于better-scroll实现左右联动滑动页面
2020/06/30 Javascript
Vue检测屏幕变化来改变不同的charts样式实例
2020/10/26 Javascript
javascript实现左右缓动动画函数
2020/11/25 Javascript
[02:12]探秘2016国际邀请赛中国区预选赛选手房间
2016/06/25 DOTA
python自动化测试实例解析
2014/09/28 Python
Python实现针对含中文字符串的截取功能示例
2017/09/22 Python
python 读取Linux服务器上的文件方法
2018/12/27 Python
Python实现的大数据分析操作系统日志功能示例
2019/02/11 Python
波兰品牌内衣及泳装网上商店:Astratex.pl
2017/02/03 全球购物
智能电子秤、手表和健康监测仪:Withings(之前为诺基亚健康)
2018/10/30 全球购物
药学专业个人自我评价
2013/11/11 职场文书
迎新晚会邀请函
2014/02/01 职场文书
会计岗位职责范本
2014/03/07 职场文书
结婚喜宴主持词
2014/03/14 职场文书
白血病捐款倡议书
2014/05/14 职场文书
班主任师德师风自我剖析材料
2014/10/02 职场文书
简历中自我评价范文
2015/03/11 职场文书
房地产财务经理岗位职责
2015/04/08 职场文书
毕业论文答辩稿范文
2015/06/23 职场文书
新年寄语2016
2015/08/17 职场文书