Json_encode防止汉字转义成unicode的方法


Posted in PHP onFebruary 25, 2016

大家都知道,json_encode通常会把json中的汉字转义成unicode,但是这并不一定是我们想要的。有时候,我们需要获得汉字形式的json字符串,比如需要获得gbk编码的json字符串(只要把汉字形式的字符串转码就可以得到了)。有什么好办法么?

php官方听到了这个需求,并提供了一种可靠的解决方案:JSON_UNESCAPED_UNICODE。这个参数可以保证json_encode不再将汉字转为unicode。

似乎这样就解决了?当我们高高兴兴的用这个参数的时候,发现并没有什么卵用。仔细一看,这个参数只有5.4之后的php支持。那更早期的php怎么办呢?

社区提供了一种方案:

function my_json_encode($arr){
//convmap since x char codes so it takes all multibyte codes (above ASCII ). So such characters are being "hidden" from normal json_encoding
array_walk_recursive($arr, function (&$item, $key) { if (is_string($item)) $item = mb_encode_numericentity($item, array (x, xffff, , xffff), 'UTF-'); });
return mb_decode_numericentity(json_encode($arr), array (x, xffff, , xffff), 'UTF-');
}

不过这种方法只有5.3才支持,因为5.2并不支持匿名函数。至于解决办法?把匿名函数定义一下即可。

ps:解决json_encode中文UNICODE转码问题

用PHP的json_encode来处理中文的时候, 中文都会被编码, 变成不可读的, 类似”\u***”的格式,如果想汉字不进行转码,这里提供三种方法

1.升级PHP,在PHP5.4, 这个问题终于得以解决, Json新增了一个选项: JSON_UNESCAPED_UNICODE, 故名思议, 就是说, Json不要编码Unicode.

<?php
echo json_encode("中文", JSON_UNESCAPED_UNICODE);
//"中文"

2.把汉字先urlencode然后再使用json_encode,json_encode之后再次使用urldecode来解码,这样编码出来的json数组中的汉字就不会出现unicode编码了。

$array = array(
'test'=>urlencode("我是测试")
);
$array = json_encode($array);
echo urldecode($array);
//{"test":"我是测试"}

3.对unicode码再进行解码,解码函数如下:

function decodeUnicode($str)
{
return preg_replace_callback('/\\\\u([0-9a-f]{4})/i',
create_function(
'$matches',
'return mb_convert_encoding(pack("H*", $matches[1]), "UTF-8", "UCS-2BE");'
),
$str);
}
PHP 相关文章推荐
php csv操作类代码
Dec 14 PHP
php模拟js函数unescape的函数代码
Oct 20 PHP
探讨:如何编写PHP扩展
Jun 13 PHP
基于PHPExcel的常用方法总结
Jun 13 PHP
IIS安装Apache伪静态插件的具体操作图文
Jul 01 PHP
curl不使用文件存取cookie php使用curl获取cookie示例
Jan 26 PHP
php实现保存submit内容之后禁止刷新
Mar 19 PHP
PHP使用PDO操作数据库的乱码问题解决方法
Apr 08 PHP
详谈配置phpstorm完美支持Codeigniter(CI)代码自动完成(代码提示)
Apr 07 PHP
php修改数组键名的方法示例
Apr 15 PHP
Laravel find in set排序实例
Oct 09 PHP
Laravel框架数据库迁移操作实例详解
Apr 06 PHP
PHP+JS三级菜单联动菜单实现方法
Feb 24 #PHP
PHP+MySQL实现的简单投票系统实例
Feb 24 #PHP
汇总PHPmailer群发Gmail的常见问题
Feb 24 #PHP
PHP设计模式之简单投诉页面实例
Feb 24 #PHP
在Mac OS上编译安装Nginx+PHP+MariaDB开发环境的教程
Feb 23 #PHP
phalcon框架使用指南
Feb 23 #PHP
PHP计算日期相差天数实例分析
Feb 23 #PHP
You might like
ThinkPHP3.1.x修改成功与失败跳转页面的方法
2017/09/29 PHP
Yii2结合Workerman的websocket示例详解
2018/09/10 PHP
javascript SocialHistory 检查访问者是否访问过某站点
2008/08/02 Javascript
解析jquery获取父窗口的元素
2013/06/26 Javascript
jquery ready函数、css函数及text()使用示例
2013/09/27 Javascript
js关于字符长度限制的问题示例探讨
2014/01/24 Javascript
Jquery动态替换div内容及动态展示的方法
2015/01/23 Javascript
jQuery实现网页顶部固定导航效果代码
2015/12/24 Javascript
原生JS版和jquery版实现checkbox的全选/全不选/点选/行内点选(Mr.Think)
2016/10/29 Javascript
Vue.js中用webpack合并打包多个组件并实现按需加载
2017/02/17 Javascript
jQuery插件zTree实现删除树节点的方法示例
2017/03/08 Javascript
微信小程序 连续旋转动画(this.animation.rotate)详解
2017/04/07 Javascript
bootstrap Table的一些小操作
2017/11/01 Javascript
jQuery实现通过方向键控制div块上下左右移动的方法【测试可用】
2018/04/26 jQuery
详解VUE里子组件如何获取父组件动态变化的值
2018/12/26 Javascript
JavaScript数据结构与算法之二叉树插入节点、生成二叉树示例
2019/02/21 Javascript
vue elementUI table 自定义表头和行合并的实例代码
2019/05/22 Javascript
IE11下CKEditor在Bootstrap Modal中下拉问题的解决
2019/09/25 Javascript
[00:27]DOTA2战队VP、Secret贺新春
2018/02/11 DOTA
[47:46]完美世界DOTA2联赛 Magma vs GXR 第三场 11.07
2020/11/10 DOTA
详解python3中的真值测试
2018/08/13 Python
Python3.5面向对象编程图文与实例详解
2019/04/24 Python
python中列表的切片与修改知识点总结
2019/07/23 Python
Python使用正则实现计算字符串算式
2019/12/29 Python
Pytorch 实现focal_loss 多类别和二分类示例
2020/01/14 Python
Python 整行读取文本方法并去掉readlines换行\n操作
2020/09/03 Python
Python特殊属性property原理及使用方法解析
2020/10/09 Python
HTML5 placeholder属性详解
2016/06/22 HTML / CSS
为您搜罗全球潮流時尚品牌:HBX
2019/12/04 全球购物
给护士表扬信
2014/01/19 职场文书
生产操作工岗位职责
2014/09/16 职场文书
试用期转正后的自我评价
2014/09/21 职场文书
课外活动实习计划
2015/01/19 职场文书
2015年世界环境日活动方案
2015/05/05 职场文书
python操作xlsx格式文件并读取
2021/06/02 Python
新手入门Mysql--sql执行过程
2021/06/20 MySQL