gpt4 book ai didi

php - 为什么我不必再次在 SELECT 上重新转义表单数据?

转载 作者:行者123 更新时间:2023-11-29 01:35:27 25 4
gpt4 key购买 nike

对于我选择编写自己的博客评论解决方案的简单应用程序,我执行以下 3 个步骤:

<强>1。通过 POST 从基本 HTML 表单输入中获取数据,然后像这样转义字符串:

$komentar = htmlspecialchars($_POST['komentar'], ENT_QUOTES, 'UTF-8');

<强>2。使用 PDO 进行数据库插入:

$stmt = $conn->prepare("INSERT INTO komentare (id, jmeno, komentar, clanek) VALUES (DEFAULT, ?, ?, ?)");
$stmt->bind_param("sss", $jmeno, $komentar, $clanek);
$stmt->execute();
$stmt->close();
$conn->close();

<强>3。像这样使用简单的 SELECT 和循环回显列出结果:

$sql = "SELECT jmeno, komentar FROM komentare WHERE clanek = '$clanek' ORDER BY id DESC";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
while($row = $result->fetch_assoc()) {
$zviratkoNum = rand(1,10);
$vypis_jmeno = $row["jmeno"];
$vypis_komentar = $row["komentar"];
echo "<div class='radek'><span class='jmeno zviratka-". $zviratkoNum ."'>". $vypis_jmeno. "</span><span class='komentar'>" . $row["komentar"] . "</span></div>";
}
} else {
echo "<h5>Zatím zde nejsou žádné komentáře</h5>";
}
$conn->close();

我认为这是一种不好的做法,因为虽然我对输入进行了转义(希望是正确的),但我正在检索未转义的数据。但令我惊讶的是,它作为文本被回显到 DOM 中(来 self 的真实测试评论的屏幕截图):

enter image description here

  1. 为什么?
  2. 这是不好的做法吗?

提前致谢,亚当

最佳答案

htmlspecialchars 将文本字符串转换为适合插入 HTML 文档的格式。

数据库不是 HTML 文档。在 HTML 中具有特殊含义的字符(如 &)在数据库中通常没有特殊含义。

所以你是:

  1. 获取文本并将其转换为 HTML 源代码
  2. 获取 HTML 源代码并将其放入数据库
  3. 从数据库中取出 HTML 源代码并将其转换为 HTML 源代码(因此它是 *double)编码并为您提供将显示 HTML 源代码的 HTML)
  4. 将其放入 HTML 文档中

转义数据时,请在将其放入要转义的数据格式之前执行此操作。

在将其放入数据库之前不要转换为 HTML。仅在将其放入 HTML 文档之前执行此操作。

关于php - 为什么我不必再次在 SELECT 上重新转义表单数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49296016/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com