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自动生成月历代码
Oct 09 PHP
创建配置文件 用PHP写出自己的BLOG系统 2
Apr 12 PHP
Apache服务器无法使用的解决方法
May 08 PHP
解析web文件操作常见安全漏洞(目录、文件名检测漏洞)
Jun 29 PHP
json的键名为数字时的调用方式(示例代码)
Nov 15 PHP
回帖脱衣服的图片实现代码
Feb 15 PHP
PHP实现数组递归转义的方法
Aug 28 PHP
PHP提示Warning:phpinfo() has been disabled函数禁用的解决方法
Dec 17 PHP
php计算数组相同值出现次数的代码(array_count_values)
Jan 20 PHP
PHP时间和日期函数详解
May 08 PHP
在Mac上编译安装PHP7的开发环境
Jul 28 PHP
laravel中的一些简单实用功能
Nov 03 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
php 短链接算法收集与分析
2011/12/30 PHP
php获取本周开始日期和结束日期的方法
2015/03/09 PHP
ThinkPHP框架分布式数据库连接方法详解
2017/03/14 PHP
laravel 验证错误信息到 blade模板的方法
2019/09/29 PHP
HTML中不支持静态Expando的元素的问题
2007/03/08 Javascript
Jquery Validate 正则表达式实用验证代码大全
2013/08/23 Javascript
获取中文字符串的实际长度代码
2014/06/05 Javascript
Js使用WScript.Shell对象执行.bat文件和cmd命令
2014/12/18 Javascript
javascript实现拖放效果
2015/12/16 Javascript
jquery动态创建div与input的实例代码
2016/10/12 Javascript
weUI应用之JS常用信息提示弹层的封装
2016/11/21 Javascript
详解Vue整合axios的实例代码
2017/06/21 Javascript
javascript 通过键名获取键盘的keyCode方法
2017/12/31 Javascript
修改npm全局安装模式的路径方法
2018/05/15 Javascript
移动端吸顶fixbar的解决方案详解
2019/07/17 Javascript
layer.open提交子页面的form和layedit文本编辑内容的方法
2019/09/27 Javascript
[08:44]DOTA2发布会群星聚首 我们都是刀塔人
2014/03/21 DOTA
Python自动化运维_文件内容差异对比分析
2017/12/13 Python
Python实现判断字符串中包含某个字符的判断函数示例
2018/01/08 Python
Python连接Redis的基本配置方法
2018/09/13 Python
Python绘制并保存指定大小图像的方法
2019/01/10 Python
Django 内置权限扩展案例详解
2019/03/04 Python
使用python实现unix2dos和dos2unix命令的例子
2019/08/13 Python
python实现输入的数据在地图上生成热力图效果
2019/12/06 Python
社区版pycharm创建django项目的方法(pycharm的newproject左侧没有项目选项)
2020/09/23 Python
python 爬虫请求模块requests详解
2020/12/04 Python
CSS3 Pie工具推荐--让IE6-8支持一些优秀的CSS3特性
2014/09/02 HTML / CSS
HTML5的Geolocation地理位置定位API使用教程
2016/05/12 HTML / CSS
Melijoe美国官网:法国奢侈童装购物网站
2017/04/19 全球购物
学生处主任岗位职责
2013/12/01 职场文书
如何写好建议书
2014/03/13 职场文书
《苏珊的帽子》教学反思
2014/04/07 职场文书
员工家属慰问信
2015/03/24 职场文书
催款通知书范文
2015/04/17 职场文书
2016年父亲节寄语
2015/12/04 职场文书
Java 数据结构七大排序使用分析
2022/04/02 Java/Android