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 图片文件上传实现代码
Dec 29 PHP
php查看请求头信息获取远程图片大小的方法分享
Dec 25 PHP
浅谈PHP正则表达式中修饰符/i, /is, /s, /isU
Oct 21 PHP
codeigniter实现get分页的方法
Jul 10 PHP
在WordPress的后台中添加顶级菜单和子菜单的函数详解
Jan 11 PHP
PHP文件缓存smarty模板应用实例分析
Feb 26 PHP
PHP记录页面停留时间的方法
Mar 30 PHP
php进行ip地址掩码运算处理的方法
Jul 11 PHP
Thinkphp结合ajaxFileUpload实现异步图片传输示例
Mar 13 PHP
PHP后台微信支付和支付宝支付开发
Apr 28 PHP
Yii框架批量插入数据扩展类的简单实现方法
May 23 PHP
PHP pthreads v3下同步处理synchronized用法示例
Feb 21 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
《猛禽小队》:DC宇宙的又一超级大烂片
2020/04/09 欧美动漫
php下统计用户在线时间的一种尝试
2010/08/26 PHP
php切割页面div内容的实现代码分享
2012/07/31 PHP
input file获得文件根目录简单实现
2013/04/26 PHP
关于JSON以及JSON在PHP中的应用技巧
2013/11/27 PHP
php 生成短网址原理及代码
2014/01/23 PHP
详解PHP序列化反序列化的方法
2015/10/27 PHP
JavaScript中的Document文档对象
2008/01/16 Javascript
JavaScript 加号(+)运算符号
2009/12/06 Javascript
学习js在线html(富文本,所见即所得)编辑器
2012/12/18 Javascript
jQuery中RadioButtonList的功能及用法实例介绍
2013/08/23 Javascript
JS取文本框中最小值的简单实例
2013/11/29 Javascript
深入探密Javascript数组方法
2015/01/08 Javascript
jQuery zTree加载树形菜单功能
2016/02/25 Javascript
javascript中call apply 与 bind方法详解
2016/03/10 Javascript
jQuery 3.0十大新特性
2016/07/06 Javascript
很棒的js选项卡切换效果
2016/07/15 Javascript
详解Jquery的事件操作和文档操作
2016/12/19 Javascript
Node学习记录之cluster模块
2017/05/31 Javascript
JavaScript切换搜索引擎的导航网页搜索框实例代码
2017/06/11 Javascript
angular select 默认值设置方法
2017/06/23 Javascript
jQuery实现右侧抽屉式在线客服功能
2017/12/25 jQuery
微信小程序自定义组件components(代码详解)
2019/10/21 Javascript
js制作提示框插件
2020/12/24 Javascript
[49:18]2018DOTA2亚洲邀请赛 3.31 小组赛 A组 OG vs TNC
2018/04/01 DOTA
用实例详解Python中的Django框架中prefetch_related()函数对数据库查询的优化
2015/04/01 Python
使用Python写一个小游戏
2018/04/02 Python
Python使用Paramiko控制liunx第三方库
2020/05/20 Python
Django解决frame拒绝问题的方法
2020/12/18 Python
amazeui时间组件的实现示例
2020/08/18 HTML / CSS
英国乐购杂货:Tesco Groceries
2018/11/29 全球购物
大气污染防治方案
2014/05/19 职场文书
丧事主持词
2015/07/02 职场文书
2015年教学副校长工作总结
2015/07/22 职场文书
追悼会答谢词范文
2015/09/29 职场文书
浅谈:电影《孔子》观后感(范文)
2019/10/14 职场文书