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 相关文章推荐
escape unescape的php下的实现方法
Apr 27 PHP
PHP中获取内网用户MAC地址(WINDOWS/linux)的实现代码
Aug 11 PHP
如何在symfony中导出为CSV文件中的数据
Oct 06 PHP
PHP使用CURL_MULTI实现多线程采集的例子
Jul 29 PHP
Codeigniter校验ip地址的方法
Mar 21 PHP
利用php输出不同的心形图案
Apr 22 PHP
mysql desc(DESCRIBE)命令实例讲解
Sep 24 PHP
php array_multisort 对数组进行排序详解及实例代码
Oct 27 PHP
php array_values 返回数组的所有值详解及实例
Nov 12 PHP
使用PHP访问RabbitMQ消息队列的方法示例
Jun 06 PHP
PHP chunk_split()函数讲解
Feb 12 PHP
laravel使用redis队列实例讲解
Mar 23 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 is_file()和is_dir()用于遍历目录时用法注意事项
2010/03/02 PHP
匹配csdn用户数据库与官方用户的重合度并将重叠部分的用户筛选出来
2011/12/25 PHP
PHP中文分词 自动获取关键词介绍
2012/11/13 PHP
smarty模板引擎中内建函数if、elseif和else的使用方法
2015/01/22 PHP
php bootstrap实现简单登录
2016/03/08 PHP
关于PHP中Session文件过多的问题及session文件保存位置
2016/03/17 PHP
总结PHP如何获取当前主机、域名、网址、路径、端口和参数等
2016/09/09 PHP
PHP封装的XML简单操作类完整实例
2017/11/13 PHP
js 数组实现一个类似ruby的迭代器
2009/10/27 Javascript
浅析onsubmit校验表单时利用ajax的return false无效问题
2013/07/10 Javascript
JS可以控制样式的名称写法一览
2014/01/16 Javascript
jquery.gridrotator实现响应式图片展示画廊效果
2015/06/23 Javascript
jQuery鼠标经过方形图片切换成圆边效果代码分享
2015/08/20 Javascript
Javascript将JSON日期格式化
2016/08/23 Javascript
jQuery的Read()方法代替原生JS详解
2016/11/08 Javascript
Ajax跨域实现代码(后台jsp)
2017/01/21 Javascript
vue项目实现记住密码到cookie功能示例(附源码)
2018/01/31 Javascript
详解微信小程序调用支付接口支付
2019/04/28 Javascript
发布订阅模式在vue中的实际运用实例详解
2019/06/09 Javascript
微信公众号生成新浪短网址的实现(快速生成)
2019/08/18 Javascript
layui监听select变化,以及设置radio选中的方法
2019/09/24 Javascript
JavaScript实现简单随机点名器
2019/11/21 Javascript
Vue使用路由钩子拦截器beforeEach和afterEach监听路由
2020/11/16 Javascript
利用 JavaScript 实现并发控制的示例代码
2020/12/31 Javascript
python网络爬虫之如何伪装逃过反爬虫程序的方法
2017/11/23 Python
Python实现PS滤镜Fish lens图像扭曲效果示例
2018/01/29 Python
python os用法总结
2018/06/08 Python
Python3实现获取图片文字里中文的方法分析
2018/12/13 Python
从多个tfrecord文件中无限读取文件的例子
2020/02/17 Python
HTML5中indexedDB 数据库的使用实例
2017/05/11 HTML / CSS
法国综合购物网站:RueDuCommerce
2016/09/12 全球购物
名人珠宝设计师:Melinda Maria Jewelry
2019/03/06 全球购物
AJAX的全称是什么
2012/11/06 面试题
毕业设计工作总结
2015/08/14 职场文书
导游词之河北野三坡
2019/12/11 职场文书
解决Pytorch修改预训练模型时遇到key不匹配的情况
2021/06/05 Python