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时间戳与日期之间转换的实例介绍
Apr 19 PHP
php中\r \r\n \t的区别示例介绍
Feb 08 PHP
浅析php中json_encode()和json_decode()
May 25 PHP
PHP针对常规模板引擎中与CSS/JSON冲突的解决方法
Aug 19 PHP
使用GDB调试PHP代码,解决PHP代码死循环问题
Mar 02 PHP
php建立Ftp连接的方法
Mar 07 PHP
PHP实现的DES加密解密封装类完整实例
Apr 29 PHP
PHP 实现公历日期与农历日期的互转换
Sep 13 PHP
php递归函数怎么用才有效
Feb 24 PHP
php字符串截取函数mb_substr用法实例分析
Jun 25 PHP
php使用curl模拟多线程实现批处理功能示例
Jul 25 PHP
php设计模式之享元模式分析【星际争霸游戏案例】
Mar 23 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之第八天
2006/10/09 PHP
php计算两个整数的最大公约数常用算法小结
2015/03/05 PHP
用js做一个小游戏平台 (一)
2009/12/29 Javascript
锋利的jQuery 要点归纳(三) jQuery中的事件和动画(上:事件篇)
2010/03/24 Javascript
JavaScript自定义日期格式化函数详细解析
2014/01/14 Javascript
jquery遍历json对象集合详解
2016/05/18 Javascript
关于function类中定义变量this的简单说明
2016/05/28 Javascript
简单实现js间歇或无缝滚动效果
2016/06/29 Javascript
使用jquery.qrcode.js生成二维码插件
2016/10/17 Javascript
JavaScript实现图片懒加载(Lazyload)
2016/11/28 Javascript
原生js仿淘宝网商品放大镜效果
2017/02/28 Javascript
SpringMVC+bootstrap table实例详解
2017/06/02 Javascript
webstorm添加vue.js支持的方法教程
2017/07/05 Javascript
基于easyui checkbox 的一些操作处理方法
2017/07/10 Javascript
详解PHP后期静态绑定分析与应用
2018/03/21 Javascript
在vue中使用jointjs的方法
2018/03/24 Javascript
vue-video-player 断点续播的实现
2021/02/01 Vue.js
[02:21]十步杀一人,千里不留行——DOTA2全新英雄天涯墨客展示
2018/08/29 DOTA
Python实现分割文件及合并文件的方法
2015/07/10 Python
Python基于PycURL自动处理cookie的方法
2015/07/25 Python
使用Python读写文本文件及编写简单的文本编辑器
2016/03/11 Python
Python实现PS滤镜Fish lens图像扭曲效果示例
2018/01/29 Python
Python动态导入模块的方法实例分析
2018/06/28 Python
对python读取CT医学图像的实例详解
2019/01/24 Python
Python中的几种矩阵乘法(小结)
2019/07/10 Python
在 Linux/Mac 下为Python函数添加超时时间的方法
2020/02/20 Python
opencv之颜色过滤只留下图片中的红色区域操作
2020/06/05 Python
python安装mysql的依赖包mysql-python操作
2021/01/01 Python
Nike香港官网:Nike HK
2019/03/23 全球购物
英国领先的酒杯和水晶玻璃器皿制造商:Dartington Crystal
2019/06/23 全球购物
浅谈react路由传参的几种方式
2021/03/23 Javascript
文明之星事迹材料
2014/05/09 职场文书
社区综治宣传月活动总结
2014/07/02 职场文书
深度好文:50条没人告诉你的人生经验,句句精辟
2019/08/22 职场文书
低版本Druid连接池+MySQL驱动8.0导致线程阻塞、性能受限
2021/07/01 MySQL
Java基础——Map集合
2022/04/01 Java/Android