今天在写微信登录回调的时候 用state带上多个参数的json的时候,在回调函数上解析json居然出现NULL
首先检查了一下传过来的参数是这样的
string"{varify_code:XXX,id:XXXX}"
说明有参数,但是格式不对,网上搜了一堆 这里总结一下
-
有人说在json_decode的时候加上
true
但是并没有用,因为加上一个true
也只是吧解析为对象改为解析为数组而已 -
使用
stripslashes
函数和html_entity_decode
函数:
html_entity_decode()
函数的作用是把 HTML 实体转换为字符。
stripslashes()
函数的作用是删除反斜杠。
$data = stripslashes(html_entity_decode($info)); //$info是传递过来的json字符串
$data = json_decode($data,TRUE);
但是并不适合这个情况
- 用
json_last_error
函数看看错误吗是什么 //返回了4
这个问题主要是因为在 json 字符串中反斜杠被转义,只需要用 htmlspecialchars_decode() 函数处理一下 $state即可:
$content = htmlspecialchars_decode($state);
但是并不适合这个情况
- 分析了一下 应该是在传上回调时候就应该用
urlencode
转义一下 防止破坏,所以在保存 json 数据时使用 urlencode() 函数:
$content = urlencode(json_encode($content));
//解析时使用 urldecode() 函数:
$content = json_decode(urldecode($content),true);
完美解决