如何使json_encod中的中文和url不被编译?

来源:互联网 发布:淘宝相机镜头十大黑店 编辑:程序博客网 时间:2024/06/05 02:20

近来在做微信开发的时候,需要做到下面的一个功能:用户可以自定义菜单。自定义菜单通过代码写一个json串上传到服务器这样很好做,可是用户做后期菜单修改的时候怎么做?难打让他们自己组织json串吗?所以写了一个可以上传自定义菜单的界面,可是在写的过程中出现了一个问题。
我首先在界面中用js组织一个数组,这个数组可以通过json_encode这个函数转换成一个字符串。比如我现在一个字符串是这样的:

<?php    $arr = array(        'name' => '授权的官网',        'type' => 'view',        'url'  => "https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx18e64eb040b25cda&redirect_uri=http%3a%2f%2fwww.ibaihuizi.cn%2fhome%2fWeui%2findex&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect",     );    $jsonString = json_encode($arr);    var_dump($jsonString);?>

经过json编译了之后,输出的字符串是这样的

string '{"name":"\u6388\u6743\u7684\u5b98\u7f51","type":"view","url":"https:\/\/open.weixin.qq.com\/connect\/oauth2\/authorize?appid=wx18e64eb040b25cda&redirect_uri=http%3a%2f%2fwww.ibaihuizi.cn%2fhome%2fWeui%2findex&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect"}' (length=279)

很明显可以看到在这个json串中,中文和url都被转义了,不过还好,php5.4以上的版本中,给json_encode添加了JSON_UNESCAPED_UNICODE这个参数,可以使得中文不再被转义,那么如何使得url中的 / 不被转义呢,虽然转义上传到微信服务器以后点击菜单并不影响他可以被点击,但是看起来真的不怎么舒服,所以可以添加JSON_UNESCAPED_SLASHES这个参数让url中的斜杠不被转义,这样一来,被编译后的json代码变成了这样:

string '{"name":"授权的官网","type":"view","url":"https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx18e64eb040b25cda&redirect_uri=http%3a%2f%2fwww.ibaihuizi.cn%2fhome%2fWeui%2findex&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect"}' (length=259)

这样一来,是不是看起来好看多了?那怎么在json_encode里面添加两个参数呢?通过查文档可以知道,每个参数都是二进制中的一位,所以,多个参数的情况,可以进行 按位或 运算:

$jsonString = json_encode($arr,JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);

另外,在我的项目里面,url中的&也被转义成了 &amp;还不知道怎么解决,最后也是经过str_replase函数进行json串了对&amp;到&的替换,希望高手看到以后有所解答!

1 0