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 相关文章推荐
在Windows中安装Apache2和PHP4的权威指南
Oct 09 PHP
深入file_get_contents与curl函数的详解
Jun 25 PHP
php生成txt文件标题及内容的方法
Jan 16 PHP
跟我学Laravel之请求(Request)的生命周期
Oct 15 PHP
腾讯CMEM的PHP扩展编译安装方法
Sep 25 PHP
Zend Framework入门之环境配置及第一个Hello World示例(附demo源码下载)
Mar 21 PHP
PHP生成短网址方法汇总
Jul 12 PHP
PHP PDO操作MySQL基础教程
Jun 05 PHP
PHP中创建和编辑Excel表格的方法
Sep 13 PHP
PHP xpath提取网页数据内容代码解析
Jul 16 PHP
PHP Ajax跨域问题解决方案代码实例
Aug 01 PHP
PHP编程一定要改掉的5个不良习惯
Sep 18 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
给海燕B411配件机起死回生配上件
2021/03/02 无线电
php异常处理使用示例
2014/02/25 PHP
PHP学习笔记(一):基本语法之标记、空白、和注释
2015/04/17 PHP
php获取客户端IP及URL的方法示例
2017/02/03 PHP
Windows服务器中PHP如何安装redis扩展
2019/09/27 PHP
一个加载js文件的小脚本
2007/06/28 Javascript
javascript如何实现360度全景照片问题汇总
2016/04/04 Javascript
bootstrap table服务端实现分页效果
2017/08/10 Javascript
jQuery动态添加.active 实现导航效果代码思路详解
2017/08/29 jQuery
angularjs数组判断是否含有某个元素的实例
2018/02/27 Javascript
jQuery实现模糊查询的方法分析
2018/05/10 jQuery
Angular5中提取公共组件之radio list的实例代码
2018/07/10 Javascript
VUE+Element环境搭建与安装的方法步骤
2019/01/24 Javascript
原生js实现针对Dom节点的CRUD操作示例
2019/08/26 Javascript
基于layui内置模块(element常用元素的操作)
2019/09/20 Javascript
VUE实现图片验证码功能
2020/11/18 Javascript
python使用calendar输出指定年份全年日历的方法
2015/04/04 Python
Python贪心算法实例小结
2018/04/22 Python
Python基于datetime或time模块分别获取当前时间戳的方法实例
2019/02/19 Python
django自带serializers序列化返回指定字段的方法
2019/08/21 Python
keras 回调函数Callbacks 断点ModelCheckpoint教程
2020/06/18 Python
基于python实现简单网页服务器代码实例
2020/09/14 Python
如何使用pycharm连接Databricks的步骤详解
2020/09/23 Python
猫途鹰英国网站:TripAdvisor英国(旅游社区和旅游评论)
2016/08/30 全球购物
师范毕业生自荐信
2013/10/17 职场文书
行政总经理岗位职责
2013/12/05 职场文书
个人简历自我评价
2014/02/02 职场文书
群众路线批评与自我批评
2014/02/06 职场文书
绿色家庭事迹材料
2014/05/01 职场文书
煤矿安全知识竞赛活动总结
2014/07/07 职场文书
群众路线表态发言材料
2014/10/17 职场文书
社区志愿服务活动感想
2015/08/07 职场文书
2016年社会主义核心价值观心得体会
2016/01/21 职场文书
《雷雨》教学反思
2016/02/20 职场文书
使用Djongo模块在Django中使用MongoDB数据库
2021/06/20 Python
【海涛dota解说】DCG联赛第一周 LGD VS DH
2022/04/01 DOTA