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 相关文章推荐
MYSQL环境变量设置方法
Jan 15 PHP
php中支持多种编码的中文字符串截取函数!
Mar 20 PHP
php循环输出数据库内容的代码
May 24 PHP
解析file_get_contents模仿浏览器头(user_agent)获取数据
Jun 27 PHP
php中自定义函数dump查看数组信息类似var_dump
Jan 27 PHP
PHP中把数据库查询结果输出为json格式简单实例
Apr 09 PHP
PHP版本升级到7.x后wordpress的一些修改及wordpress技巧
Dec 25 PHP
php+html5实现无刷新图片上传教程
Jan 22 PHP
PHP编程中的Session阻塞问题与解决方法分析
Aug 07 PHP
PHP实现用session来实现记录用户登陆信息
Oct 15 PHP
微信公众平台开发教程⑤ 微信扫码支付模式介绍
Apr 10 PHP
PHP保存Base64图片base64_decode的问题整理
Nov 04 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中调用JAVA
2006/10/09 PHP
PHP5.0正式发布 不完全兼容PHP4 新增多项功能
2006/10/09 PHP
PHP 基于Yii框架中使用smarty模板的方法详解
2013/06/13 PHP
PHP实现将多个文件中的内容合并为新文件的方法示例
2017/06/10 PHP
jQuery 可以拖动的div实现代码 脚本之家修正版
2009/06/26 Javascript
JQuery操作tr和td内容的方法实例
2013/03/06 Javascript
深入理解jQuery中live与bind方法的区别
2013/12/18 Javascript
DOM基础教程之事件对象
2015/01/20 Javascript
JavaScript学习小结(一)——JavaScript入门基础
2015/09/02 Javascript
JS验证邮件地址格式方法小结
2015/12/01 Javascript
JavaScript知识点总结(十一)之js中的Object类详解
2016/05/31 Javascript
AngularJS实现星星等级评分功能
2016/09/24 Javascript
js中的DOM模拟购物车功能
2017/03/22 Javascript
Vue中render方法的使用详解
2018/01/26 Javascript
详解vue中axios请求的封装
2019/04/08 Javascript
微信小程序判断用户是否需要再次授权获取个人信息
2019/07/18 Javascript
jdk1.8+vue elementui实现多级菜单功能
2020/09/24 Javascript
[15:41]教你分分钟做大人——灰烬之灵
2015/03/11 DOTA
[52:37]完美世界DOTA2联赛循环赛 Forest vs DM BO2第一场 10.29
2020/10/29 DOTA
Python如何实现MySQL实例初始化详解
2017/11/06 Python
Python调用C语言的方法【基于ctypes模块】
2018/01/22 Python
详解tensorflow训练自己的数据集实现CNN图像分类
2018/02/07 Python
Python3之简单搭建自带服务器的实例讲解
2018/06/04 Python
使用python接受tgam的脑波数据实例
2020/04/09 Python
如何用Python提取10000份log中的产品信息
2021/01/14 Python
法国二手手袋、手表和奢侈珠宝购物网站:Collector Square
2018/07/05 全球购物
银行求职推荐信范文
2013/11/30 职场文书
出纳员的岗位职责
2014/02/22 职场文书
家长会演讲稿
2014/04/26 职场文书
大型会议策划方案
2014/05/17 职场文书
教师一帮一活动总结
2014/07/08 职场文书
工作失职造成投诉的检讨书范文
2014/10/05 职场文书
干部作风建设年活动剖析材料
2014/10/23 职场文书
2015年会计人员工作总结
2015/05/22 职场文书
学习商务礼仪心得体会
2016/01/22 职场文书
python 自动化偷懒的四个实用操作
2021/04/11 Python