您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息

php使用json_decode解析json返回NULL

2024/3/6 18:49:10发布21次查看
问一下各位高手,为啥json_decode解析$_post['mypostdata']字符串会是null,但是把$_post['mypostdata']复制到php文件中可以正常解析,怎么办?请大家指点一下!代码如下:
打印输出:
[[90987682,陈好茹,管理],[309888729,张先生,管理],[56439871,jack,管理],[76398723,李洁,e]]
utf-8
arr是null
当然问这个问题之前,楼主也是在网上查了很久的资料例如 (php使用json_decode返回null):http://www.nginx.cn/337.html 提到的3种解决办法:
1. json字符串必须以双引号包含
$output = str_replace(', '', $output);
2. json字符串必须是utf8编码
$output = iconv('gbk', 'utf8', $output);
3.不能有多余的逗号 如:[1,2,]
用正则替换掉,preg_replace('/,\s*([\]}])/m', '$1', $output)
对于1,2,3对比打印的字符串格式应该是没有问题的,上面的编码也打印出来了是utf-8的,还真的不知道是咋回事!
另外楼主用的php版本php version 5.2.6应该是用不了json_last_error()函数的 参考:http://php.net/manual/zh/function.json-last-error.php
json_last_error — 返回最后发生的错误  (php 5 >= 5.3.0, php 7)
-------------------分割线:楼主直接接上面红色部分的json字符串复制到$member_info做json解析,而不是通过post参数获取----------------------
打印输出
[[90987682,陈好茹,管理],[309888729,张先生,管理],[56439871,jack,管理],[76398723,李洁,e]]
utf-8
名字:陈好茹
名字:张先生
名字:jack
名字:李洁
再不确定的问一下:以上应该说明json格式是没有问题的? 字符utf-8编码也是没有问题的?
回复讨论(解决方案) 看上去没有问题
你 echo base64_encode($_post['mypostdata']); 贴出结果,让我分析一下
看上去没有问题
你 echo base64_encode($_post['mypostdata']); 贴出结果,让我分析一下
一下是base64_encode数据,多谢了!
w1tcijkwotg3njgyxcisxclpmyjlpb3ojllciixciueuoeeqhlwixsxbxcizmdk4odg3mjlciixciuw8oowfioeun1wilfwi566h55cgxcjdlftciju2ndm5odcxxcisxcjqywnrxcisxclnrqhnkizcil0sw1winzyzotg3mjnciixciuadjua0gvwilfwizvwixv0 $s = base64_decode(w1tcijkwotg3njgyxcisxclpmyjlpb3ojllciixciueuoeeqhlwixsxbxcizmdk4odg3mjlciixciuw8oowfioeun1wilfwi566h55cgxcjdlftciju2ndm5odcxxcisxcjqywnrxcisxclnrqhnkizcil0sw1winzyzotg3mjnciixciuadjua0gvwilfwizvwixv0);echo $s;
[[\90987682\,\陈好茹\,\管理\],[\309888729\,\张先生\,\管理\],[\56439871\,\jack\,\管理\],[\76398723\,\李洁\,\e\]]
可以看到双引号被转义了,显然你的 magic_quotes_gpc 开关是打开的(到 php5.4 这个开关就无效了)
由于使用了自动转义,所以不是直接入库的话,需要去转义 if(get_magic_quotes_gpc()) { if(isset($_get)) $_get = unturn($_get); if(isset($_post)) $_post = unturn($_post);}//去转义function unturn($val) { if(is_array($val)) { $val = array_map('unturn', $val); }else { $val = stripslashes($val); } return $val;}
$s = base64_decode(w1tcijkwotg3njgyxcisxclpmyjlpb3ojllciixciueuoeeqhlwixsxbxcizmdk4odg3mjlciixciuw8oowfioeun1wilfwi566h55cgxcjdlftciju2ndm5odcxxcisxcjqywnrxcisxclnrqhnkizcil0sw1winzyzotg3mjnciixciuadjua0gvwilfwizvwixv0);$s = stripcslashes($s);print_r(json_decode($s, true));
array( [0] => array ( [0] => 90987682 [1] => 陈好茹 [2] => 管理 ) [1] => array ( [0] => 309888729 [1] => 张先生 [2] => 管理 ) [2] => array ( [0] => 56439871 [1] => jack [2] => 管理 ) [3] => array ( [0] => 76398723 [1] => 李洁 [2] => e ))
好吧,果然版主,思路清晰,问题解决直接了当,毫不拖泥带水,多谢了。 本来可以结贴了,不过本着能慧更多人的目的,请版主分享一下解决这类问题的心得呗!
学习了。
很好用,好理解
该用户其它信息

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录 Product