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 相关文章推荐
PHP个人网站架设连环讲(一)
Oct 09 PHP
dedecms防止FCK乱格式化你的代码的修改方法
Mar 17 PHP
php中static静态变量的使用方法详解
Jun 04 PHP
发一个php简单的伪原创程序,配合商城采集用的
Oct 12 PHP
php对mongodb的扩展(初出茅庐)
Nov 11 PHP
PHP实现返回JSON和XML的类分享
Jan 28 PHP
Linux系统中设置多版本PHP共存配合Nginx服务器使用
Dec 21 PHP
php 一维数组的循环遍历实现代码
Apr 10 PHP
详解Laravel5.6 Passport实现Api接口认证
Jul 27 PHP
PHP+redis实现的购物车单例类示例
Feb 02 PHP
laravel实现登录时监听事件,添加登录用户的记录方法
Sep 30 PHP
laravel框架语言包拓展实现方法分析
Nov 22 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批量上传图片的具体实现方法介绍.
2014/02/26 PHP
简单概括PHP的字符串中单引号与双引号的区别
2016/05/07 PHP
php微信支付接口开发程序
2016/08/02 PHP
使用jQuery的ajax功能实现的RSS Reader 代码
2009/09/03 Javascript
js写出遮罩层登陆框和对联广告并自动跟随滚动条滚动
2014/04/29 Javascript
jQuery获得子元素个数的方法
2015/04/14 Javascript
jquery实现弹出层效果实例
2015/05/19 Javascript
js+HTML5实现canvas多种颜色渐变效果的方法
2015/06/05 Javascript
JavaScript中的pow()方法使用详解
2015/06/15 Javascript
BootStrap Table 分页后重新搜索问题的解决办法
2016/08/08 Javascript
轻松实现jquery选项卡切换效果
2016/10/10 Javascript
Bootstrap 模态框实例插件案例分析
2016/12/28 Javascript
vue实现手机号码抽奖上下滚动动画示例
2017/10/18 Javascript
angularjs数组判断是否含有某个元素的实例
2018/02/27 Javascript
node.js 使用 net 模块模拟 websocket 握手进行数据传递操作示例
2020/02/11 Javascript
javascript绘制简单钟表效果
2020/04/07 Javascript
[02:28]DOTA2亚洲邀请赛附加赛 RECAP赛事回顾
2015/01/29 DOTA
[02:33]2018 DOTA2亚洲邀请赛回顾视频 再次拾起那些美妙的时刻
2018/04/10 DOTA
Python安装图文教程 Pycharm安装教程
2018/03/27 Python
python生成n个元素的全组合方法
2018/11/13 Python
Python中文件的写入读取以及附加文字方法
2019/01/23 Python
Python及Pycharm安装方法图文教程
2019/08/05 Python
python实现邮件自动发送
2019/08/10 Python
什么是python的自省
2020/06/21 Python
公认8个效率最高的爬虫框架
2020/07/28 Python
Django中使用Celery的方法步骤
2020/12/07 Python
python pillow库的基础使用教程
2021/01/13 Python
荷兰演唱会和体育比赛订票网站:viagogo荷兰
2018/04/08 全球购物
硕士研究生自我鉴定
2013/11/08 职场文书
安全责任协议书
2014/04/21 职场文书
2019年度政务公开考核工作总结模板
2019/11/11 职场文书
利用python做表格数据处理
2021/04/13 Python
golang gopm get -g -v 无法获取第三方库的解决方案
2021/05/05 Golang
Html5同时支持多端sdk的小技巧
2021/11/17 HTML / CSS
「魔导具师妲莉亚永不妥协~从今天开始的自由职人生活~」1、2卷发售宣传CM公开
2022/03/21 日漫
引用计数法和root搜索算法以及JVM中判定对象需要回收的方法
2022/04/19 Java/Android