遇到一个关于php7 json_decode null问题!
具体问题描述:
1、确认文件无bom头
2、尝试了如下多种方式去除非法字符串,但是仍然输出null
$some_string = htmlspecialchars_decode($some_string); $some_string = preg_replace("/\t/", " ", $some_string); $some_string = preg_replace("/\n/", ' ', $some_string); $some_string = str_replace("\n", ' ', $some_string); $some_string = str_replace ('\n','', $some_string);
3、json_last_error()输出4,syntax error, malformed json
4、直接输出字符串,浏览器能够正常解析josn,如下截图
解决办法:
因为你的字符串不是标准的json字符串, 标准的json字符串每个string类型都要用"引起了
测试代码
<?php $jsonstr1 = '{status: {retcode:0, msg: "success"}, data: {}}';var_dump(json_decode($jsonstr1, true));var_dump(json_last_error());echo "--------分割线--------".php_eol;$jsonstr2 = '{"status": {"retcode":0, "msg": "success"}, "data": {}}';var_dump(json_decode($jsonstr2, true));
结果
nullint(4)--------分割线--------array(2) { ["status"]=> array(2) { ["retcode"]=> int(0) ["msg"]=> string(7) "success" } ["data"]=> array(0) { }}
============== 更新 ==============
经过调试,发现是 bom 引起的,下面是解决方案
$datastring = $merchant_arr['data'];$a = substr($datastring, 0, 1);$b = substr($datastring, 1, 1);$c = substr($datastring, 2, 1);if ((ord($a) == 239) && (ord($b) == 187) && (ord($c) == 191)) { $datastring = substr($datastring, 3);}$dataarray = json_decode($datastring, true);
推荐学习:《php7教程》
以上就是遇到一个关于php7 json_decode null问题!的详细内容。