php使用json_decode解析json返回NULL

<?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
名字:李洁
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值