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 stripos()函数及注意事项的分析
Jun 08 PHP
基于PHP Socket配置以及实例的详细介绍
Jun 13 PHP
PHP中func_get_args(),func_get_arg(),func_num_args()的区别
Sep 30 PHP
php像数组一样存取和修改字符串字符
Mar 21 PHP
php继承中方法重载(覆盖)的应用场合
Feb 09 PHP
微信自定义菜单的处理开发示例
Apr 16 PHP
php用户登录之cookie信息安全分析
May 13 PHP
thinkphp 手机号和用户名同时登录
Jan 20 PHP
php计算给定日期所在周的开始日期和结束日期示例
Feb 06 PHP
php实现base64图片上传方式实例代码
Feb 22 PHP
PHP类的自动加载与命名空间用法实例分析
Jun 05 PHP
phpStorm2020 注册码
Sep 17 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-redis中文文档介绍
2013/02/07 PHP
ThinkPHP3.1新特性之对分组支持的改进与完善概述
2014/06/19 PHP
jquery 框架使用教程 AJAX篇
2009/10/11 Javascript
Js操作树节点自动折叠展开的几种方法
2014/05/05 Javascript
JavaScript字符串对象charAt方法入门实例(用于取得指定位置的字符)
2014/10/17 Javascript
Javascript解析URL方法详解
2014/12/05 Javascript
详解JavaScript逻辑Not运算符
2015/12/04 Javascript
基于casperjs和resemble.js实现一个像素对比服务详解
2018/01/10 Javascript
vue中的ref和$refs的使用
2018/11/22 Javascript
jQuery+vue.js实现的多选下拉列表功能示例
2019/01/15 jQuery
JS字典Dictionary类定义与用法示例
2019/02/01 Javascript
Seajs源码详解分析
2019/04/02 Javascript
利用Vue实现一个markdown编辑器实例代码
2019/05/19 Javascript
vue 解决在微信内置浏览器中调用支付宝支付的情况
2020/11/09 Javascript
JavaScript事件概念详解(区分静态注册和动态注册)
2021/02/05 Javascript
Python中List.count()方法的使用教程
2015/05/20 Python
Python自动化运维_文件内容差异对比分析
2017/12/13 Python
浅谈Python Opencv中gamma变换的使用详解
2018/04/02 Python
python中itertools模块zip_longest函数详解
2018/06/12 Python
Matplotlib中文乱码的3种解决方案
2018/11/15 Python
python利用Tesseract识别验证码的方法示例
2019/01/21 Python
python+selenium 定位到元素,无法点击的解决方法
2019/01/30 Python
解决python 3 urllib 没有 urlencode 属性的问题
2019/08/22 Python
Python中url标签使用知识点总结
2020/01/16 Python
Windows+Anaconda3+PyTorch+PyCharm的安装教程图文详解
2020/04/03 Python
Python 私有属性和私有方法应用场景分析
2020/06/19 Python
Python Pygame实现俄罗斯方块
2021/02/19 Python
python反编译教程之2048小游戏实例
2021/03/03 Python
婴儿鞋,独特的婴儿服装和配件:Zutano
2018/11/03 全球购物
linux面试题参考答案(6)
2016/06/23 面试题
汽车运用工程毕业生自荐信
2013/10/29 职场文书
商场端午节活动方案
2014/01/29 职场文书
就业自我评价
2014/02/04 职场文书
财务会计自荐信范文
2014/02/21 职场文书
基层党员对照检查材料
2014/09/24 职场文书
公司辞职信模板
2015/05/13 职场文书