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 相关文章推荐
Extended CHM PHP 语法手册之 DIY
Oct 09 PHP
在PHP3中实现SESSION的功能(一)
Oct 09 PHP
PHP 页面编码声明方法详解(header或meta)
Mar 12 PHP
PHPwind整合最土系统用户同步登录实现方法
Dec 08 PHP
eaglephp使用微信api接口开发微信框架
Jan 09 PHP
PHP学习笔记(三):数据类型转换与常量介绍
Apr 17 PHP
php实现可运算的验证码
Nov 10 PHP
Symfony2学习笔记之控制器用法详解
Mar 17 PHP
PHP绕过open_basedir限制操作文件的方法
Jun 10 PHP
PHP Primary script unknown 解决方法总结
Aug 22 PHP
PHP PDO和消息队列的个人理解与应用实例分析
Nov 25 PHP
PHP的new static和new self的区别与使用
Nov 27 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函数
2010/01/11 PHP
php类中的各种拦截器用法分析
2014/11/03 PHP
PHP使用内置函数生成图片的方法详解
2016/05/09 PHP
php实现保存周期为1天的购物车类
2017/07/07 PHP
Laravel框架实现的记录SQL日志功能示例
2018/06/19 PHP
var与Javascript变量隐式声明
2009/09/17 Javascript
JavaScript中的集合及效率
2010/01/08 Javascript
基于Jquery的$.cookie()实现跨越页面tabs导航实现代码
2011/03/03 Javascript
functional继承模式 摘自javascript:the good parts
2011/06/20 Javascript
Extjs4 GridPanel的主要配置参数详细介绍
2013/04/18 Javascript
JQ技术实现注册页面带有校验密码强度
2015/07/27 Javascript
自动适应iframe右边的高度
2016/12/22 Javascript
关于在vue-cli中使用微信自动登录和分享的实例
2017/06/22 Javascript
解决JS外部文件中文注释出现乱码问题
2017/07/09 Javascript
Three.js利用Detector.js插件如何实现兼容性检测详解
2017/09/26 Javascript
vue对storejs获取的数据进行处理时遇到的几种问题小结
2018/03/20 Javascript
Angular5中提取公共组件之radio list的实例代码
2018/07/10 Javascript
vue 中 beforeRouteEnter 死循环的问题
2019/04/23 Javascript
简单学习5种处理Vue.js异常的方法
2019/06/17 Javascript
微信小程序框架的页面布局代码
2019/08/17 Javascript
node+multer实现图片上传的示例代码
2020/02/18 Javascript
vue实现移动端触屏拖拽功能
2020/08/21 Javascript
Python素数检测的方法
2015/05/11 Python
简单谈谈python中的语句和语法
2017/08/10 Python
利用pandas进行大文件计数处理的方法
2018/07/25 Python
Python 实现文件打包、上传与校验的方法
2019/02/13 Python
Python利用for循环打印星号三角形的案例
2020/04/12 Python
Pandas之read_csv()读取文件跳过报错行的解决
2020/04/21 Python
python破解同事的压缩包密码
2020/10/14 Python
CSS3 animation实现简易幻灯片轮播特效
2016/09/27 HTML / CSS
很酷的小工具和电子产品商城:GearBest
2016/11/19 全球购物
联想瑞士官方网站:Lenovo Switzerland
2017/11/19 全球购物
2014年企业党建工作总结
2014/12/18 职场文书
宾馆前台接待岗位职责
2015/04/02 职场文书
SpringBoot 拦截器妙用你真的了解吗
2021/07/01 Java/Android
Java Kafka 消费积压监控的示例代码
2021/07/01 Java/Android