PHP使用json_encode函数时不转义中文的解决方法


Posted in PHP onNovember 12, 2014

本文实例讲述了PHP使用json_encode函数时不转义中文的解决方法。分享给大家供大家参考。具体方法如下:

json_encode函数对于gbk中的中文字符是不会转换的或直接转换成空格了,本文就来给各位整理一个关于json不转义中文问题处理技巧,相信对大家有所帮助。

如果你调用 PHP 自带的 json_encode() 函数, 碰到中文时, 中文会被转义掉. 例如:

echo json_encode(array('你好'));

// 输出: ["\u4f60\u597d"]

这非常恼人, 像是一堆乱码, JSON 标准从来没有说要把非 ASCII 字符转义, 标准说的是”Any UNICODE character”.
如何禁用掉这种转义呢? 答案是, PHP 自带的 json_encode() 不能禁用这个特性(在 5.4.0 版本之前, 之后的版本你可以加 JSON_UNESCAPED_UNICODE 选项), 你只能换一个新的 JSON 库. 为了简单, 我简单写了几十行代码, 实现一个 json_encode().
class Util

{

    static function json_encode($input){

        // 从 PHP 5.4.0 起, 增加了这个选项.

        if(defined('JSON_UNESCAPED_UNICODE')){

            return json_encode($input, JSON_UNESCAPED_UNICODE);

        }

        if(is_string($input)){

            $text = $input;

            $text = str_replace('\\', '\\\\', $text);

            $text = str_replace(

                array("\r", "\n", "\t", "\""),

                array('\r', '\n', '\t', '\\"'),

                $text);

            return '"' . $text . '"';

        }else if(is_array($input) || is_object($input)){

            $arr = array();

            $is_obj = is_object($input) || (array_keys($input) !== range(0, count($input) - 1));

            foreach($input as $k=>$v){

                if($is_obj){

                    $arr[] = self::json_encode($k) . ':' . self::json_encode($v);

                }else{

                    $arr[] = self::json_encode($v);

                }

            }

            if($is_obj){

                return '{' . join(',', $arr) . '}';

            }else{

                return '[' . join(',', $arr) . ']';

            }

        }else{

            return $input . '';

        }

    }

}

考虑不到的地方, 例如判断关联数组(is_obj)的地方, 遇到问题再说. 你要是不喜欢类, 那就自己转成纯函数, 换个名字吧。

希望本文所述对大家的PHP程序设计有所帮助。

PHP 相关文章推荐
PHP+javascript模拟Matrix画面
Oct 09 PHP
珊瑚虫IP库浅析
Feb 15 PHP
PHP 判断变量类型实现代码
Oct 23 PHP
PHP Zip压缩 在线对文件进行压缩的函数
May 26 PHP
php XPath对XML文件查找及修改实现代码
Jul 27 PHP
shopex中集成的站长统计功能的代码简单分析
Aug 11 PHP
php二维数组排序方法(array_multisort usort)
Dec 25 PHP
ThinkPHP3.1新特性之多数据库操作更加完善
Jun 19 PHP
php循环table实现一行两列显示的方法
Jun 04 PHP
PHP变量赋值、代入给JavaScript中的变量
Jun 29 PHP
Laravel5框架添加自定义辅助函数的方法
Aug 01 PHP
PHP pthreads v3下worker和pool的使用方法示例
Feb 21 PHP
php5.3提示Function ereg() is deprecated Error问题解决方法
Nov 12 #PHP
PHP中file_exists()判断中文文件名无效的解决方法
Nov 12 #PHP
php基于str_pad实现卡号不足位数自动补0的方法
Nov 12 #PHP
PHP利用func_get_args和func_num_args函数实现函数重载实例
Nov 12 #PHP
PHP之sprintf函数用法详解
Nov 12 #PHP
php中simplexml_load_file函数用法实例
Nov 12 #PHP
php实现的ping端口函数实例
Nov 12 #PHP
You might like
PHP计算2点经纬度之间的距离代码
2013/08/12 PHP
基于GD2图形库的PHP生成图片缩略图类代码分享
2015/02/08 PHP
详解PHP的Laravel框架中Eloquent对象关系映射使用
2016/02/26 PHP
js利用与或运算符优先级实现if else条件判断表达式
2010/04/15 Javascript
jquery插件之easing 动态菜单
2010/08/21 Javascript
javascript ajax的5种状态介绍
2014/08/18 Javascript
DOM节点的替换或修改函数replaceChild()用法实例
2015/01/12 Javascript
JavaScript判断IE版本型号
2015/07/27 Javascript
Angularjs中使用Filters详解
2016/03/11 Javascript
JavaScript操作选择对象的简单实例
2016/05/16 Javascript
Js得到radiobuttonlist选中值的两种方法(推荐)
2016/08/25 Javascript
详解vue-cli 构建Vue项目遇到的坑
2017/08/30 Javascript
JS实现调用本地摄像头功能示例
2018/05/18 Javascript
AngularJS实现的自定义过滤器简单示例
2019/02/02 Javascript
[01:03:00]DOTA2上海特级锦标赛A组败者赛 EHOME VS CDEC第一局
2016/02/25 DOTA
python33 urllib2使用方法细节讲解
2013/12/03 Python
python实现类的静态变量用法实例
2015/05/08 Python
Python中tell()方法的使用详解
2015/05/24 Python
Python搭建APNS苹果推送通知推送服务的相关模块使用指南
2016/06/02 Python
Python实现基本线性数据结构
2016/08/22 Python
Python 使用requests模块发送GET和POST请求的实现代码
2016/09/21 Python
python之Flask实现简单登录功能的示例代码
2018/12/24 Python
python词云库wordcloud的使用方法与实例详解
2020/02/17 Python
Python操作Excel工作簿的示例代码(\*.xlsx)
2020/03/23 Python
浅谈sklearn中predict与predict_proba区别
2020/06/28 Python
Keras预训练的ImageNet模型实现分类操作
2020/07/07 Python
在HTML5中如何使用CSS建立不可选的文字
2014/10/17 HTML / CSS
CSS3的 fit-content实现水平居中
2017/09/07 HTML / CSS
突袭HTML5之Javascript API扩展2—地理信息服务及地理位置API学习
2013/01/31 HTML / CSS
世界上最全面的汽车零部件和配件集合:JC Whitney
2016/09/04 全球购物
世界上最大的皮肤科医生拥有和经营的美容网站:LovelySkin
2021/01/03 全球购物
暑期社会实践学生的自我评价
2014/01/09 职场文书
基层党员公开承诺书
2014/05/29 职场文书
工作态度恶劣检讨书
2015/05/06 职场文书
消防验收申请报告
2015/05/15 职场文书
Vue OpenLayer 为地图绘制风场效果
2022/04/24 Vue.js