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 smarty函数扩展
Mar 15 PHP
fleaphp crud操作之findByField函数的使用方法
Apr 23 PHP
php 文章调用类代码
Aug 11 PHP
php 字符串替换的方法
Jan 10 PHP
简单的php数据库操作类代码(增,删,改,查)
Apr 08 PHP
更改localhost为其他名字的方法
Feb 10 PHP
通过dbi使用perl连接mysql数据库的方法
Apr 16 PHP
php中的字符编码转换函数用法示例
Oct 20 PHP
ThinkPHP中I(),U(),$this->post()等函数用法
Nov 22 PHP
php实现按天数、星期、月份查询的搜索框
May 02 PHP
php实现登录tplink WR882N获取IP和重启的方法
Jul 20 PHP
laravel通过创建自定义artisan make命令来新建类文件详解
Aug 17 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
PHP中在数据库中保存Checkbox数据(2)
2006/10/09 PHP
jq的get传参数在utf-8中乱码问题的解决php版
2008/07/23 PHP
用PHP代码给图片加水印
2015/07/01 PHP
php metaphone()函数的定义和用法
2016/05/15 PHP
PHP5中使用mysqli的prepare操作数据库的介绍
2019/03/18 PHP
仅IE不支持setTimeout/setInterval函数的第三个以上参数
2011/05/25 Javascript
常用Extjs工具:Extjs.util.Format使用方法
2012/03/22 Javascript
CSS(js)限制页面显示的文本字符长度
2012/12/27 Javascript
jQuery包裹节点用法完整示例
2016/09/13 Javascript
利用jQuery插件imgAreaSelect实现图片上传裁剪(放大缩小)
2016/12/02 Javascript
jQuery实现滚动条滚动到子元素位置(方便定位)
2017/01/08 Javascript
ionic中列表项增加和删除的实现方法
2017/01/22 Javascript
基于JavaScript实现微信抢红包功能
2017/07/20 Javascript
详解vue之自行实现派发与广播(dispatch与broadcast)
2021/01/19 Vue.js
Python内置函数bin() oct()等实现进制转换
2012/12/30 Python
Python实现的金山快盘的签到程序
2013/01/17 Python
python optparse模块使用实例
2015/04/09 Python
举例讲解Python中的身份运算符的使用方法
2015/10/13 Python
用python写的一个wordpress的采集程序
2016/02/27 Python
利用python如何处理nc数据详解
2018/05/23 Python
python爬虫之urllib3的使用示例
2018/07/09 Python
Python使用贪婪算法解决问题
2019/10/22 Python
Python3 中作为一等对象的函数解析
2019/12/11 Python
Tensorflow累加的实现案例
2020/02/05 Python
PyCharm永久激活方式(推荐)
2020/09/22 Python
django model的update时auto_now不被更新的原因及解决方式
2020/04/01 Python
Python drop方法删除列之inplace参数实例
2020/06/27 Python
HTML5本地存储之IndexedDB
2017/06/16 HTML / CSS
军校本科大学生自我评价
2014/01/14 职场文书
公益广告宣传方案
2014/02/28 职场文书
秘书英文求职信
2014/04/16 职场文书
2014国庆节国旗下演讲稿(精选版)
2014/09/26 职场文书
上帝也疯狂观后感
2015/06/09 职场文书
十二生肖观后感
2015/06/12 职场文书
CSS作用域(样式分割)的使用汇总
2021/11/07 HTML / CSS
【海涛教你打DOTA】虚空假面第一视角骨弓3房29杀
2022/04/01 DOTA