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 相关文章推荐
实现分十页分向前十页向后十页的处理
Oct 09 PHP
php抓即时股票信息
Oct 09 PHP
php计算十二星座的函数代码
Aug 21 PHP
PHP Directory 函数的详解
Mar 07 PHP
PHP中spl_autoload_register()和__autoload()区别分析
May 10 PHP
Laravel框架实现发送短信验证功能代码
Jun 06 PHP
Yii框架连接mongodb数据库的代码
Jul 27 PHP
常用PHP数组排序函数归纳
Aug 08 PHP
php 使用html5实现多文件上传实例
Oct 24 PHP
PHP封装函数实现生成随机的字符串验证码
Jan 24 PHP
curl 出现错误的调试方法(必看)
Feb 13 PHP
ThinkPHP框架实现定时执行任务的两种方法分析
Sep 04 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笔记之:有规律大文件的读取与写入的分析
2013/04/26 PHP
探讨PHP函数ip2long转换IP时数值太大产生负数的解决方法
2013/06/06 PHP
PHP处理数组和XML之间的互相转换
2016/06/02 PHP
phpstorm 正则匹配删除空行、注释行(替换注释行为空行)
2018/01/21 PHP
关于实现代码语法标亮 dp.SyntaxHighlighter
2007/02/02 Javascript
js 内存释放问题
2010/04/25 Javascript
connect中间件session、cookie的使用方法分享
2014/06/17 Javascript
javascript中Date()函数在各浏览器中的显示效果
2015/06/18 Javascript
js模拟淘宝网的多级选择菜单实现方法
2015/08/18 Javascript
JS深度拷贝Object Array实例分析
2016/03/31 Javascript
js实现的在线调色板功能完整实例
2016/12/21 Javascript
轻松理解JavaScript闭包
2017/03/14 Javascript
解决AngualrJS页面刷新导致异常显示问题
2017/04/20 Javascript
nodejs acl的用户权限管理详解
2018/03/14 NodeJs
vue中v-show和v-if的异同及v-show用法
2019/06/06 Javascript
微信小程序进入广告实现代码实例
2019/09/19 Javascript
Openlayers实现距离面积测量
2020/09/28 Javascript
Vue+Bootstrap实现简易学生管理系统
2021/02/09 Vue.js
玩转python爬虫之正则表达式
2016/02/17 Python
python图像常规操作
2017/11/11 Python
python3下使用cv2.imwrite存储带有中文路径图片的方法
2018/05/10 Python
对Python中plt的画图函数详解
2018/11/07 Python
python 使用pygame工具包实现贪吃蛇游戏(多彩版)
2019/10/30 Python
Python 窗体(tkinter)下拉列表框(Combobox)实例
2020/03/04 Python
Python word文本自动化操作实现方法解析
2020/11/05 Python
基于Django集成CAS实现流程详解
2020/11/28 Python
康帕斯酒店预订:Compass Hospitality(支持中文)
2018/08/23 全球购物
安全检查与奖惩制度
2014/01/23 职场文书
公司委托书怎么写
2014/08/02 职场文书
机关作风整顿个人整改措施2014
2014/09/17 职场文书
党员群众路线整改措施及今后努力方向
2014/10/28 职场文书
酒店仓管员岗位职责
2015/04/01 职场文书
2015财务年终工作总结范文
2015/05/22 职场文书
五年级作文之劳动作文
2019/11/12 职场文书
浅谈Redis存储数据类型及存取值方法
2021/05/08 Redis
vue组件vue-esign实现电子签名
2022/04/21 Vue.js