查看报错原因:

$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;

}

ajax 影响转义行为的原因

检查ajax中提交的json是否被二次转义

相关参数

htmlspecialchars_decode()

函数将其处理回原来的字符串

html_entity_decode 与 htmlspecialchars_decode 的区别

strip_tags()

去除字符串中的 HTML、XML 以及 PHP 的标签,获取纯文本内容

htmlspecialchars()

反函数把预定义的字符转换为 HTML 实体

serialize

把对象转化为二进制的字符串

unserialize

反串行化一个对象

addslashes

指定的预定义字符前添加反斜杠

stripslashes

去掉反斜线字符

作者 admin

百度广告效果展示