php使用json_decode解析json返回NULL

wewsi1021 2015-05-31 11:22:33
问一下各位高手,为啥json_decode解析$_POST['mypostdata']字符串会是null,但是把$_POST['mypostdata']复制到php文件中可以正常解析,怎么办?请大家指点一下!代码如下:
<?php
header('content-type:text/html; charset=utf-8');
$member_info=$_POST['mypostdata'].trim();
$encode = mb_detect_encoding($member_info, array("ASCII","UTF-8","GB2312","GBK","BIG5"));
echo $member_info.'<br/>';
echo $encode.'<br/>';
$arr = json_decode($member_info,true);
if ($arr == null) echo 'arr是null<br/>';
?>
打印输出:

[["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参数获取----------------------
<?php
$member_info='[["90987682","陈好茹","管理"],["309888729","张先生","管理"],["56439871","jack","管理"],["76398723","李洁","e"]]';
$encode = mb_detect_encoding($member_info, array("ASCII","UTF-8","GB2312","GBK","BIG5"));
echo $member_info.'<br/>';
echo $encode.'<br/>';
$arr = json_decode($member_info,true);
if ($arr == null) {
echo 'arr是null<br/>';
} else {
foreach($arr as $ele_arr) {
echo '名字:'.$ele_arr[1];
echo '<br/>';
}
}
?>
打印输出

[["90987682","陈好茹","管理"],["309888729","张先生","管理"],["56439871","jack","管理"],["76398723","李洁","e"]]
UTF-8
名字:陈好茹
名字:张先生
名字:jack
名字:李洁


再不确定的问一下:以上应该说明json格式是没有问题的? 字符utf-8编码也是没有问题的?
...全文
3717 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
wm0508 2016-07-04
  • 打赏
  • 举报
回复
多谢了!!!
蜗蜗奶糖 2016-06-17
  • 打赏
  • 举报
回复
不错,虽然不是一个问题,但很有启发性!
void9main 2016-06-12
  • 打赏
  • 举报
回复
很好,很强大,学习了
qq_34008545 2016-03-22
  • 打赏
  • 举报
回复
很好用,好理解
xuzuning 2015-05-31
  • 打赏
  • 举报
回复
$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
        )

)

wewsi1021 2015-05-31
  • 打赏
  • 举报
回复
引用 1 楼 xuzuning 的回复:
看上去没有问题 你 echo base64_encode($_POST['mypostdata']); 贴出结果,让我分析一下
一下是base64_encode数据,多谢了! W1tcIjkwOTg3NjgyXCIsXCLpmYjlpb3ojLlcIixcIueuoeeQhlwiXSxbXCIzMDk4ODg3MjlcIixcIuW8oOWFiOeUn1wiLFwi566h55CGXCJdLFtcIjU2NDM5ODcxXCIsXCJqYWNrXCIsXCLnrqHnkIZcIl0sW1wiNzYzOTg3MjNcIixcIuadjua0gVwiLFwiZVwiXV0
xuzuning 2015-05-31
  • 打赏
  • 举报
回复
看上去没有问题 你 echo base64_encode($_POST['mypostdata']); 贴出结果,让我分析一下
ohmygirl 2015-05-31
  • 打赏
  • 举报
回复
学习了。
wewsi1021 2015-05-31
  • 打赏
  • 举报
回复
好吧,果然版主,思路清晰,问题解决直接了当,毫不拖泥带水,多谢了。 本来可以结贴了,不过本着能慧更多人的目的,请版主分享一下解决这类问题的心得呗!

21,886

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧