查看报错原因:
$data= json_decode($json);
var_dump($data);
if ($data=== null) {
echo “JSON 解析失败,错误信息:” . json_last_error();
}
JSON 解析失败,错误信息:4
原因1:
在传递json数据时,默认html里会使用双引号包裹,导致出错。
如果 JSON 数据中包含类似 " 这样的实体,而不是双引号 “, 那么在解析 JSON 数据时就会出现语法错误。
解决:
我们可以使用htmlspecialchars() 函数把预定义的字符转换为 HTML 实体。
// 打印原始数据
var_dump($data);
string(169) “[{"s_id":"21857","s_name":"谢先生","s_tel":"18700001234"}]”
// htmlspecialchars_decode转义(1)
$data= htmlspecialchars_decode($data);
var_dump($data);
string(121) “[{"s_id":"21857","s_name":"谢先生","s_tel":"18700001234"}]”
// htmlspecialchars_decode转义(2)-> 如果是前端多次转义后的json,一次转义后几下可能还会出现null
$data= htmlspecialchars_decode($data);
var_dump($data);
[{“s_id”:”21857″,”s_name”:”谢先生”,”s_tel”:”18700001234″}]
// json解析
$sets = json_decode($sets);
var_dump(strpos($sets, ‘"’)));
[“s_id”=> “21857”,”s_name”=>”谢先生”,”s_tel”=>18700001234]
/** * 解析前台传来的不完整json字符串 */
private function json_decode_x($str) {
$data_arr = array();
$arr = json_decode($str, 1);
foreach ($arr as $x => $a) {
if (preg_match(‘/”:/’, $arr[$x])) { //匹配
$data_arr[$x] = $this->json_decode_x($a);
} else {
$data_arr[$x] = $a;
}
}
return $data_arr;
}
相关参数
htmlspecialchars_decode()
函数将其处理回原来的字符串
strip_tags()
去除字符串中的 HTML、XML 以及 PHP 的标签,获取纯文本内容
htmlspecialchars()
反函数把预定义的字符转换为 HTML 实体
serialize
把对象转化为二进制的字符串
unserialize
反串行化一个对象
addslashes
指定的预定义字符前添加反斜杠
stripslashes
去掉反斜线字符