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通过文件头检测文件类型通用代码类(zip,rar等)
Oct 19 PHP
phpmyadmin安装时提示:Warning: require_once(./libraries/common.inc.php)错误解决办法
Aug 18 PHP
yii框架中的Url生产问题小结
Jan 16 PHP
PHP迭代器实现斐波纳契数列的函数
Nov 12 PHP
CI(CodeIgniter)框架中的增删改查操作
Jun 10 PHP
ThinkPHP在新浪SAE平台的部署实例
Oct 31 PHP
php生成4位数字验证码的实现代码
Nov 23 PHP
zen cart实现订单中增加paypal中预留电话的方法
Jul 12 PHP
php自定义函数实现二维数组排序功能
Jul 20 PHP
PHP文件上传操作实例详解
Sep 27 PHP
PHP 二级子目录(后台目录)设置二级域名
Mar 02 PHP
layui数据表格自定义每页条数limit设置
Oct 26 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/02/27 PHP
PHP中UNIX时间戳和日期间的转换与计算实例
2014/11/19 PHP
PHP explode()函数的几个应用和implode()函数有什么区别
2015/11/05 PHP
PHP中对数组的一些常用的增、删、插操作函数总结
2015/11/27 PHP
一文掌握PHP Xdebug 本地与远程调试(小结)
2019/04/23 PHP
js图片延迟加载的实现方法及思路
2013/07/22 Javascript
JS清空多文本框、文本域示例代码
2014/02/24 Javascript
使用AngularJS实现可伸缩的页面切换的方法
2015/06/19 Javascript
用NODE.JS中的流编写工具是要注意的事项
2016/03/01 Javascript
如何使用jquery修改css中带有!important的样式属性
2016/04/28 Javascript
Javascript中indexOf()和lastIndexOf应用方法实例
2016/08/24 Javascript
Node层模拟实现multipart表单的文件上传示例
2018/01/02 Javascript
Vue.js实现表格渲染的方法
2018/09/07 Javascript
vue 巧用过渡效果(小结)
2018/09/22 Javascript
详解vue-cli3多页应用改造
2019/06/04 Javascript
vue项目从node8.x升级到12.x后的问题解决
2019/10/25 Javascript
nodejs使用Sequelize框架操作数据库的实现
2020/10/21 NodeJs
Python对列表去重的多种方法(四种方法)
2017/12/05 Python
python支付宝支付示例详解
2019/08/22 Python
Python转换itertools.chain对象为数组的方法
2020/02/07 Python
Python如何实现Paramiko的二次封装
2021/01/30 Python
Python爬虫+Tkinter制作一个翻译软件的示例
2021/02/20 Python
巴西最大的家电和百货零售商:Casas Bahia
2016/11/22 全球购物
Skyscanner澳大利亚:全球领先的旅游搜索网站
2018/03/24 全球购物
饭店工作计划书
2014/01/10 职场文书
2014新课程改革心得体会
2014/03/10 职场文书
绿色环保演讲稿
2014/05/10 职场文书
文明市民先进事迹
2014/05/15 职场文书
节水口号标语
2014/06/19 职场文书
向国旗敬礼活动小结
2014/09/27 职场文书
考试作弊检讨书
2014/10/21 职场文书
特岗教师个人总结
2015/02/10 职场文书
2015年电话客服工作总结
2015/05/18 职场文书
七年级上册生物的课件
2019/08/07 职场文书
详解nodejs内置模块
2021/05/06 NodeJs
Android开发手册TextInputLayout样式使用示例
2022/06/10 Java/Android