【发布时间】:2019-07-15 23:57:25
【问题描述】:
我做了一些研究,结果发现如果字符串不是 UTF8 格式,就会发生这种情况。
但是,经过大量测试,我可以说它确实是 UTF8(或者至少我 100% 确定它是 ASCII 格式),所以很清楚,这不可能。
json_encode 是否需要满足其他任何限定条件?
这是我的代码;
for($i=0; $i<$addNovelCount; $i++) {
$query = "SELECT *
FROM `NovelPages`
WHERE `NovelID` = '".mysqli_real_escape_string($link, $novelResults[$i])."'";
$result = mysqli_query($link, $query);
while ($row = mysqli_fetch_assoc($result)){
$Novel[] = $row['Image'];
$NovelID[] = $row['NovelID'];
$PageID[] = $row['ID'];
}
}
echo '<script>alert("'.json_encode($PageID).'");</script>';
【问题讨论】:
-
首先检查数组
$PageID是否真的包含一些东西。我知道这是一个长镜头,但如果查询没有返回任何行,那么$PageID将是空的。还$addNovelCount中的内容是 0,那么外循环将永远不会运行 -
@RiggsFolly $PageID 返回 2 个元素,都是数字。我打开浏览器控制台并收到一堆错误消息,上面写着“未捕获的语法错误:无效或意外令牌”,然后是“在 p (jquery.min.js:2) at p (jquery.min.js:2) at Ja (jquery.min.js:3) at r。 fn.init.append (jquery.min.js:3) at r.fn.init.
(jquery.min.js:3) --- 例如,还有更多。顺便说一句,注入攻击头向上 -
json_encode已经在需要时添加了外部引号。将它包装在 alert() 调用中是没有意义的。另外,不要猜测问题,而是查看真实的 HTML 输出。 -
@mario 真正的 HTML 输出是什么意思?
-
mysqli_real_escape_string()是个坏消息 user9391457 就像@RiggsFolly 指出的那样,该函数旨在用于 SQL 字符串,在我认为是 NovelID 的 INT 数据类型上使用它可能会永远使用 MySQL如果自动转换搞砸了,则该列上的索引。此外,如果不使用mysqli_set_charset()设置默认字符集,该功能是不安全的,它在手册中..