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中通过curl smtp发送邮件
Jun 05 PHP
PHP编码转换
Nov 05 PHP
下拉列表多级联动dropDownList示例代码
Jun 27 PHP
php pki加密技术(openssl)详解
Jul 01 PHP
php修改NetBeans默认字体的大小
Jul 02 PHP
php中time()和mktime()方法的区别
Sep 28 PHP
PHP远程采集图片详细教程
Jul 01 PHP
作为程序员必知的16个最佳PHP库
Dec 09 PHP
thinkPHP模板算术运算相关函数用法分析
Jul 12 PHP
ajax+php实现无刷新验证手机号的实例
Dec 22 PHP
基于thinkphp6.0的success、error实现方法
Nov 05 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部分常见问题总结
2008/03/27 PHP
php 获取全局变量的代码
2011/04/21 PHP
深入php list()函数的详解
2013/06/05 PHP
微信公众平台消息接口校验与消息接口响应实例
2014/12/23 PHP
Ubuntu下安装PHP的mongodb扩展操作命令
2015/07/04 PHP
表单提交错误后返回内容消失问题的解决方法(PHP网站)
2015/10/20 PHP
Yii实现文章列表置顶功能示例
2016/10/18 PHP
PHP设计模式之策略模式原理与用法实例分析
2019/04/04 PHP
关于Yii中模型场景的一些简单介绍
2019/09/22 PHP
document.getElementById方法在Firefox与IE中的区别
2010/05/18 Javascript
js获取php变量的实现代码
2013/08/10 Javascript
JQuery页面地址处理插件jqURL详解
2015/05/03 Javascript
Underscore.js 1.3.3 中文注释翻译说明
2015/06/25 Javascript
简述Matlab中size()函数的用法
2016/03/20 Javascript
iScroll.js 使用方法参考
2016/05/16 Javascript
基于webpack4搭建的react项目框架的方法
2018/06/30 Javascript
详解webpack模块加载器兼打包工具
2018/09/11 Javascript
Vue2.0学习系列之项目上线的方法步骤(图文)
2018/09/25 Javascript
js限制input只能输入有效的数字(第一个不能是小数点)
2018/09/28 Javascript
CentOS7中源码编译安装NodeJS的完整步骤
2018/10/13 NodeJs
[36:33]Ti4 循环赛第四日 附加赛NEWBEE vs Mouz
2014/07/13 DOTA
python截取两个单词之间的内容方法
2018/12/25 Python
python 对任意数据和曲线进行拟合并求出函数表达式的三种解决方案
2020/02/18 Python
pandas数据拼接的实现示例
2020/04/16 Python
Django实现前台上传并显示图片功能
2020/05/29 Python
canvas绘制视频封面的方法
2018/02/05 HTML / CSS
俄罗斯在线手表和珠宝商店:AllTime
2019/09/28 全球购物
医生自荐信
2013/10/11 职场文书
4s店市场专员岗位职责
2014/04/09 职场文书
司法建议书范文
2014/05/13 职场文书
单位法人授权委托书范本
2014/10/09 职场文书
城管年度个人总结
2015/02/28 职场文书
2016年第十四个公民道德宣传日活动总
2016/04/01 职场文书
护理专业毕业自我鉴定
2019/08/12 职场文书
Springboot集成阿里云OSS上传文件系统教程
2021/06/28 Java/Android
Java 数组的使用
2022/05/11 Java/Android