php5.4以下版本json不支持不转义内容中文的解决方法


Posted in PHP onJanuary 13, 2015

本文实例讲述了php5.4以下版本json不支持不转义内容中文的解决方法。分享给大家供大家参考。具体分析如下:

写ERP接口的时候遇到JAVA方接收这种json_encode后的内容

{"orderCode":"1401160935542399","creator":"\u751f\u6d3b\u7528\u54c1\u6d4b\u8bd5\u5c0f\u5c4b"}

其中"creator":"\u751f\u6d3b\u7528\u54c1\u6d4b\u8bd5\u5c0f\u5c4b"为中文,目前我们用的是UTF8的。但是JAVA方接收这种的时候自动把转义后的中文转回成中文的,那签名计算方式是按这个来的,签名自然对不上了。

查了PHP手册,5.4以下的不能不转义中文,但是我们服务器上的PHP版本是5.3的,于是用PHP模拟了一个JSON方法。

//模拟joson中文不转义

if (version_compare(PHP_VERSION, '5.4.0') >= 0) {

    function json_encode_ex($var) {

        return json_encode($var, JSON_UNESCAPED_UNICODE);

    }

} else {

    function json_encode_ex($var) {

        if ($var === null)

            return 'null';
        if ($var === true)

            return 'true';
        if ($var === false)

            return 'false';
        static $reps = array(

            array("\\", "/", "\n", "\t", "\r", "\b", "\f", '"', ),

            array('\\\\', '\\/', '\\n', '\\t', '\\r', '\\b', '\\f', '\"', ),

        );
        if (is_scalar($var))

            return '"' . str_replace($reps[0], $reps[1], (string) $var) . '"';
        if (!is_array($var))

            throw new Exception('JSON encoder error!');
        $isMap = false;

        $i = 0;

        foreach (array_keys($var) as $k) {

            if (!is_int($k) || $i++ != $k) {

                $isMap = true;

                break;

            }

        }
        $s = array();
        if ($isMap) {

            foreach ($var as $k => $v)

                $s[] = '"' . $k . '":' . call_user_func(__FUNCTION__, $v);
            return '{' . implode(',', $s) . '}';

        } else {

            foreach ($var as $v)

                $s[] = call_user_func(__FUNCTION__, $v);
            return '[' . implode(',', $s) . ']';

        }

    }

}

用的时候直接当内置函数用就行。json_encode_ex(array('钓鱼岛'=>'中国的'));还支持多维数组。

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

PHP 相关文章推荐
PHP安装问题
Oct 09 PHP
一个简单实现多条件查询的例子
Oct 09 PHP
dede3.1分页文字采集过滤规则详说(图文教程)续二
Apr 03 PHP
Optimizer与Debugger兼容性问题的解决方法
Dec 01 PHP
yii框架源码分析之创建controller代码
Jun 28 PHP
php简单浏览目录内容的实现代码
Jun 07 PHP
php实现的九九乘法口诀表简洁版
Jul 28 PHP
php生成与读取excel文件
Oct 14 PHP
PHP实现Session入库/存入redis的方法
May 04 PHP
yii2局部关闭(开启)csrf的验证的实例代码
Jul 10 PHP
Laravel 5.1 框架Blade模板引擎用法实例分析
Jan 04 PHP
PHP7 整型处理机制修改
Mar 09 PHP
php正则匹配html中带class的div并选取其中内容的方法
Jan 13 #PHP
PHP针对JSON操作实例分析
Jan 12 #PHP
php页面缓存方法小结
Jan 10 #PHP
php中异常处理方法小结
Jan 09 #PHP
PHP中浮点数计算比较及取整不准确的解决方法
Jan 09 #PHP
php模拟登陆的实现方法分析
Jan 09 #PHP
php获取四位字母和数字的随机数的实现方法
Jan 09 #PHP
You might like
第二节 对象模型 [2]
2006/10/09 PHP
php使用mysqli向数据库添加数据的方法
2015/03/20 PHP
php实现的SSO单点登录系统接入功能示例分析
2016/10/12 PHP
基于jQuery UI CSS Framework开发Widget的经验
2010/08/21 Javascript
关于js注册事件的常用方法
2013/04/03 Javascript
JS日期和时间选择控件升级版(自写)
2013/08/02 Javascript
iframe窗口高度自适应的又一个巧妙实现思路
2014/04/04 Javascript
初步认识JavaScript函数库jQuery
2015/06/18 Javascript
JavaScript的Backbone.js框架的一些使用建议整理
2016/02/14 Javascript
深入解析JavaScript中的立即执行函数
2016/05/21 Javascript
jQuery.Form实现Ajax上传文件同时设置headers的方法
2017/06/26 jQuery
vue2.0使用swiper组件实现轮播的示例代码
2018/03/03 Javascript
NodeJs搭建本地服务器之使用手机访问的实例讲解
2018/05/12 NodeJs
vue.js仿hover效果的实现方法示例
2019/01/28 Javascript
iphone刘海屏页面适配方法
2019/05/07 Javascript
Vue.js+cube-ui(Scroll组件)实现类似头条效果的横向滚动导航条
2019/06/24 Javascript
使用JavaScript获取扫码枪扫描得到的条形码的思路代码详解
2020/06/10 Javascript
[58:09]Spirit vs NB Supermajor小组赛 A组败者组决赛 BO3 第三场 6.2
2018/06/03 DOTA
详解Python3操作Mongodb简明易懂教程
2017/05/25 Python
python处理数据,存进hive表的方法
2018/07/04 Python
python实现年会抽奖程序
2019/01/22 Python
python获取地震信息 微信实时推送
2019/06/18 Python
PyTorch的SoftMax交叉熵损失和梯度用法
2020/01/15 Python
Python random库使用方法及异常处理方案
2020/03/02 Python
Python同时迭代多个序列的方法
2020/07/28 Python
Python发送邮件实现基础解析
2020/08/14 Python
亿企通软件测试面试题
2012/04/10 面试题
科长竞聘演讲稿
2014/05/16 职场文书
2014年超市工作总结
2014/11/19 职场文书
护理实习生带教计划
2015/01/16 职场文书
会计试用期工作总结2015
2015/05/28 职场文书
小人国观后感
2015/06/11 职场文书
MySQL主从复制断开的常用修复方法
2021/04/07 MySQL
一篇文章看懂MySQL主从复制与读写分离
2021/11/07 MySQL
Python 中面向接口编程
2022/05/20 Python
vue el-table实现递归嵌套的示例代码
2022/08/14 Vue.js