json中文编码问题

摘要:
在与微信界面交互的过程中,您需要传递参数json,其中有中文,因此json_encode($data)将在编码后形成格式{“group”:{“name”:“2016u8ba4u8bc1u65b0u5ba2u6237”}},但这无法被用户理解和解析,因此在搜索数据后使用json_ encode($data,json_UNESCAPED_UNICODE)可以以这种方式处理。然而,事实上,当在服务器上运行时

在和微信接口交互的过程中需要传参json而里面有中文的存在,所以json_encode($data)编码后会形成

{"group":{"name":"2016u8ba4u8bc1u65b0u5ba2u6237"}}

的格式 但是这样并不能被用户读懂解析 所以 查找资料后用了 json_encode($data,JSON_UNESCAPED_UNICODE) 这样来处理就可以了,然而实际上在服务器上跑的时候还是遇到问题,JSON_UNESCAPED_UNICODE报错。

仔细查询 发现这个参数是PHP5.4以后才支持解析,而我们服务器php版本5.3只能自己写函数来解析一下

<?php
/*
 * Add by lizhaoyao
 * Add at 2016-07-07 10:43
 * 由于 一般在PHP5.4中对json中中文转码直接用了json_encode($data,JSON_UNESCAPED_UNICODE)
 * 而 php5.3中 JSON_UNESCAPED_UNICODE 这个值是不存在的 所以要自己写一个兼容函数
 * 对变量进行 JSON 编码
 * @param mixed value 待编码的 value ,除了resource 类型之外,可以为任何数据类型,该函数只能接受 UTF-8 编码的数据
 * @return string 返回 value 值的 JSON 形式
 * */
function json_encode_ex( $value)
{
    if ( version_compare( PHP_VERSION,'5.4.0','<'))
    {
        $str = json_encode( $value);
        $str =  preg_replace_callback(
            "#\u([0-9a-f]{4})#i",
            function( $matchs)
            {
                return  iconv('UCS-2BE', 'UTF-8',  pack('H4',  $matchs[1]));
            },
            $str
        );
        return  $str;
    }
    else
    {
        return json_encode( $value, JSON_UNESCAPED_UNICODE);
    }
}
?>

然后用函数 json_encode_ex调用就好了

{"group":{"name":"2016认证新客户"}}

免责声明:文章转载自《json中文编码问题》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇HealthKit详解wpa_supplicant下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

随便看看

MIPS学习笔记(一)

本章涉及MIPS变量声明、数据输入和输出、地址获取、分支跳转语句,基本上对应于任何高级语言的最基本操作。该信息的确切形式因汇编程序而异。在MIPS程序集中,标签是后跟冒号的符号名称。)syscall程序的结尾与C类似,可以调用exit函数来停止程序的执行。停止MIPS程序的一种方法是使用类似于在C中调用exit的方法。MIPS中有一个移动指令,它将一个寄存器...

面试了一个 31岁的iOS开发者,思绪万千,30岁以上的程序员还有哪些出路?

前言之前HR给了我一份简历,刚看到简历的第一眼,31岁?31岁,iOS开发工程师,工作经历7年,5年左右都在外包公司,2年左右在创业公司。iOS开发工程师这块,还是很少遇到30岁以上的开发,正好,来了一个30岁的开发,说实话,对我来说,还是蛮期待的,希望对我有所启示。这样的过程持续了半个小时那么年过350岁的程序员还有出路吗?作为一个8年的iOS开发,而且几...

sqlserver 计算 百分比

selectltrim+'%'As百分比NUMERIC(P,S)P的默认值是:38S的默认值是:-84~127numeric(a,b)函数有两个参数,前面一个为总的位数,后面一个参数是小数点后的位数,例如numeric(5,2)是总位数为5,小数点后为2位的数,也就是说这个字段的整数位最大是3位。...

mysql状态查看 QPS/TPS/缓存命中率查看

showglobalstatusslike'Com_ commit';showstatslike“无缓冲池读取%”;Thread_cache_Hits=(1-Thread_created/connections)*100%(8)锁定状态mysql&gt;showstatslike“Binlog_缓存%”;...

登陆脚本

#!' num_ count+=1其他:lock_ input(用户名)#############1##########_###!...

Uniapp 之小程序版本更新检查——uni.getUpdateManager()

constupdateManager=uni.getUpdateManager();updateManager.onCheckForUpdate;updateManager.onUpdateReady(function(res){uni.showModal({title:'更新提示',content:'新版本已经准备好,是否重启应用?',success{if...