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导入导出CSV文件
Nov 03 PHP
php创建session的方法实例详解
Jan 27 PHP
php从csv文件读取数据并输出到网页的方法
Mar 14 PHP
PHP文件生成的图片无法使用CDN缓存的解决方法
Jun 20 PHP
php获取、检查类名、函数名、方法名的函数方法
Jun 25 PHP
PHP+Mysql基于事务处理实现转账功能的方法
Jul 08 PHP
PHP实现无限级分类(不使用递归)
Oct 22 PHP
WordPress中Gravatar头像缓存到本地及相关优化的技巧
Dec 19 PHP
PHP中each与list用法分析
Jan 08 PHP
基于PHP后台的Android新闻浏览客户端
May 23 PHP
详解使用php调用微信接口上传永久素材
Apr 11 PHP
php readfile下载大文件失败的解决方法
May 22 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 欧美动漫
DC这些乐高系列动画电影你看过几部?
2020/04/09 欧美动漫
PHP操作数组相关函数
2011/02/03 PHP
Yii实现单用户博客系统文章详情页插入评论表单的方法
2015/12/28 PHP
使用PHP处理数据库数据如何将数据返回客户端并显示当前状态
2016/02/16 PHP
php工具型代码之印章抠图
2018/07/18 PHP
firefox下frameset取不到值的解决方法
2010/09/06 Javascript
面向对象的Javascript之三(封装和信息隐藏)
2012/01/27 Javascript
ASP.NET jQuery 实例12 通过使用jQuery validation插件简单实现用户注册页面验证功能
2012/02/03 Javascript
Javascript 按位与赋值运算符 (&=)使用介绍
2014/02/04 Javascript
javascript数组操作方法小结和3个属性详细介绍
2014/07/05 Javascript
配置Grunt的Task时通配符支持和动态生成文件名问题
2015/09/06 Javascript
JavaScript拖拽、碰撞、重力及弹性运动实例分析
2016/01/08 Javascript
KnockoutJS 3.X API 第四章之数据控制流foreach绑定
2016/10/10 Javascript
javascript实现无法关闭的弹框
2016/11/27 Javascript
Node.js文件编码格式的转换的方法
2018/04/27 Javascript
详解vue-cli3多页应用改造
2019/06/04 Javascript
python中使用pyhook实现键盘监控的例子
2014/07/18 Python
在Python的Django框架中生成CSV文件的方法
2015/07/22 Python
python中的变量如何开辟内存
2018/06/26 Python
Python列表常见操作详解(获取,增加,删除,修改,排序等)
2019/02/18 Python
pandas 层次化索引的实现方法
2019/07/06 Python
python卸载后再次安装遇到的问题解决
2019/07/10 Python
python使用百度文字识别功能方法详解
2019/07/23 Python
linux下python中文乱码解决方案详解
2019/08/28 Python
css3 给页面加个半圆形导航条主要利用旋转和倾斜样式
2014/02/10 HTML / CSS
Antonioli美国在线商店:时尚前卫奢华
2019/07/29 全球购物
英国亚马逊官方网站:Amazon.co.uk
2019/08/09 全球购物
大学生个人简历自我评价
2013/11/16 职场文书
设计师个人求职信范文
2014/02/02 职场文书
励志演讲稿200字
2014/08/21 职场文书
幼儿园开学温馨提示
2015/07/15 职场文书
百年校庆感言
2015/08/01 职场文书
运输公司工作总结
2015/08/11 职场文书
bootstrapv4轮播图去除两侧阴影及线框的方法
2022/02/15 HTML / CSS
《遗弃》开发商删推文要跑路?官方回应:还在开发
2022/04/03 其他游戏