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+dbfile开发小型留言本
Oct 09 PHP
PHP 页面编码声明方法详解(header或meta)
Mar 12 PHP
PHP执行zip与rar解压缩方法实现代码
Dec 05 PHP
PHP学习之字符串比较和查找
Apr 17 PHP
php多文件上传功能实现原理及代码
Apr 18 PHP
php单例模式实现方法分析
Mar 14 PHP
微信API接口大全
Apr 15 PHP
php文件下载处理方法分析
Apr 22 PHP
php数组比较实现查找连续数的方法
Jul 29 PHP
详解WordPress中的头像缓存和代理中的缓存更新方法
Mar 01 PHP
使用ThinkPHP生成缩略图及显示
Apr 27 PHP
Laravel Intervention/image图片处理扩展包的安装、使用与可能遇到的坑详解
Nov 14 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数组无限分级数据的层级化处理代码
2012/12/29 PHP
php ci框架验证码实例分析
2013/06/26 PHP
ThinkPHP CURD方法之order方法详解
2014/06/18 PHP
php从数组中随机选择若干不重复元素的方法
2015/03/14 PHP
php reset() 函数指针指向数组中的第一个元素并输出实例代码
2016/11/21 PHP
使用Git实现Laravel项目的自动化部署
2019/11/24 PHP
jquery验证表单中的单选与多选实例
2013/08/18 Javascript
Javascript学习笔记之 函数篇(二) : this 的工作机制
2014/06/24 Javascript
详解jquery中$.ajax方法提交表单
2014/11/03 Javascript
JS实现从网页顶部掉下弹出层效果的方法
2015/08/06 Javascript
jQuery 1.9.1源码分析系列(十)事件系统之绑定事件
2015/11/19 Javascript
详解Angular2中的编程对象Observable
2016/09/17 Javascript
浅析JS中对函数function的理解(基础篇)
2016/10/14 Javascript
jQuery ajaxForm()的应用
2016/10/14 Javascript
原生js实现addclass,removeclass,toggleclasss实例
2016/11/24 Javascript
js每隔两秒输出数组中的一项(实例)
2017/05/28 Javascript
微信小程序下拉框组件使用方法详解
2018/12/28 Javascript
基于Node的Axure文件在线预览的实现代码
2019/08/28 Javascript
微信小程序 this.triggerEvent()的具体使用
2019/12/10 Javascript
JavaScript逻辑运算符相关总结
2020/09/04 Javascript
探索node之事件循环的实现
2020/10/30 Javascript
vue 解决IOS10低版本白屏的问题
2020/11/17 Javascript
python 中文乱码问题深入分析
2011/03/13 Python
Python 旋转打印各种矩形的方法
2019/07/09 Python
OpenCV 边缘检测
2019/07/10 Python
解决python DataFrame 打印结果不换行问题
2020/04/09 Python
python 下划线的不同用法
2020/10/24 Python
美国标志性加大尺码时装品牌:Ashley Stewart
2016/12/15 全球购物
NFL官方在线商店:NFLShop
2020/07/29 全球购物
职业技术学校毕业生推荐信
2013/12/03 职场文书
会计专业毕业自荐书范文
2014/02/08 职场文书
职员竞岗演讲稿
2014/05/14 职场文书
永不妥协观后感
2015/06/10 职场文书
在校证明模板
2015/06/17 职场文书
Redis高并发防止秒杀超卖实战源码解决方案
2021/11/01 Redis
《最终幻想14》6.01版本4月5日推出 追加新任务新道具
2022/04/03 其他游戏