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中接口与抽象类的区别
Jun 08 PHP
PHP中4个加速、缓存扩展的区别和选用建议
Mar 12 PHP
浅谈discuz密码加密的方式
May 22 PHP
PHP遍历目录并返回统计目录大小
Jun 09 PHP
destoon供应信息title调用出公司名称的方法
Aug 22 PHP
PHP获取一年有几周以及每周开始日期和结束日期
Aug 06 PHP
php编程每天必学之验证码
Mar 03 PHP
php获取远程图片并下载保存到本地的方法分析
Oct 08 PHP
PHP房贷计算器实例代码,等额本息,等额本金
Apr 01 PHP
Thinkphp5行为使用方法汇总
Dec 21 PHP
PHP数据对象映射模式实例分析
Mar 29 PHP
解决PHP使用CURL发送GET请求时传递参数的问题
Oct 11 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 file_get_contents函数轻松采集html数据
2010/04/22 PHP
PHP清除数组中所有字符串两端空格的方法
2014/10/20 PHP
Prototype Function对象 学习
2009/07/12 Javascript
js形成页面的一种遮罩效果实例代码
2014/01/04 Javascript
改变状态栏文字的js代码
2014/06/13 Javascript
原生JavaScript生成GUID的实现示例
2014/09/05 Javascript
express的中间件basicAuth详解
2014/12/04 Javascript
jQuery中prevUntil()方法用法实例
2015/01/08 Javascript
快速学习jQuery插件 Form表单插件使用方法
2015/12/01 Javascript
ionic 上拉菜单(ActionSheet)实例代码
2016/06/06 Javascript
jQuery 选择器(61种)整理总结
2016/09/26 Javascript
浅谈javascript:两种注释,声明变量,定义函数
2016/09/29 Javascript
leaflet的开发入门教程
2016/11/17 Javascript
js时间查询插件使用详解
2017/04/07 Javascript
ES6新特性六:promise对象实例详解
2017/04/21 Javascript
微信小程序如何获知用户运行小程序的场景教程
2017/05/17 Javascript
基于 Vue.js 之 iView UI 框架非工程化实践记录(推荐)
2017/11/21 Javascript
vue.js过滤器+ajax实现事件监听及后台php数据交互实例
2018/05/22 Javascript
vue-router+nginx 非根路径配置方法
2018/06/30 Javascript
利用React高阶组件实现一个面包屑导航的示例
2020/08/23 Javascript
javascript操作向表格中动态加载数据
2020/08/27 Javascript
Python3.6 Schedule模块定时任务(实例讲解)
2017/11/09 Python
Python中Numpy包的安装与使用方法简明教程
2018/07/03 Python
pip 安装库比较慢的解决方法(国内镜像)
2019/10/06 Python
Python并发concurrent.futures和asyncio实例
2020/05/04 Python
Python OpenCV实现测量图片物体宽度
2020/05/27 Python
详解三种方式实现平滑滚动页面到顶部的功能
2019/04/23 HTML / CSS
普通员工辞职信
2014/01/17 职场文书
《从现在开始》教学反思
2014/04/15 职场文书
《郑和远航》教学反思
2014/04/16 职场文书
家长写给孩子的评语
2014/04/18 职场文书
优秀学生党员先进事迹材料
2014/05/29 职场文书
我们的节日春节活动方案
2014/08/22 职场文书
nginx配置ssl实现https的方法示例
2021/03/31 Servers
十大最强妖精系宝可梦,哲尔尼亚斯实力最强,第五被称为大力士
2022/03/18 日漫
使用python绘制分组对比柱状图
2022/04/21 Python