在注释字段中,它使用 PDO 准备好的语句插入到 mysql 中,随后出现在数据库中,如下所示: \"what-6ren">
gpt4 book ai didi

php - 如何在显示之前正确显示 "clean"mysql 字符串?

转载 作者:行者123 更新时间:2023-11-29 18:33:46 24 4
gpt4 key购买 nike

我的网站有一个带有评论字段的表单。如果有人进入,例如:

"What" is 'up'?> 

在注释字段中,它使用 PDO 准备好的语句插入到 mysql 中,随后出现在数据库中,如下所示:

\"what\" is \'up\'?>

然后,当我从数据库中提取该数据时,我使用:

$comment=htmlspecialchars($row['comment']);

但是当我使用“echo $comment”将其输出到页面时,它会输出到页面:

\"what\" is \'up\'?>

htmlspecialchars 不应该删除那些斜杠吗?

FWIW,在转换为 PDO 之前,我曾经在插入之前使用 mysqli_real_escape_string() ,然后在显示之前使用 htmlspecialchars()

插入代码:

$comment=$_POST['comment'];

$stmt = $pdo->prepare("INSERT into details (firstname, lastname, comment) values (:firstname, :lastname, :comment)");

$stmt->execute([':firstname' => $firstname, ':lastname' => $lastname, ':comment' => $comment]);

最佳答案

您的数据库应包含正确的数据:

"what" is 'up'?>

如果它包含垃圾,例如:

\"what\" is \'up\'?>

然后很多东西都会被破坏,比如全文搜索、排序,基本上任何操作文本的东西。你甚至不能使用 LENGTH() 或 SUBSTRING()!所以这个问题必须尽快修复。

插入/更新值的代码部分出现问题。

  • magic_quotes 可以被激活(破坏数据的绝佳方法)
  • 代码中杂散的addslashes()
  • 使用 mysql_real_escape_string() 或类似函数进行双重转义
  • 转义 + 准备好的 stmt

狩猎顺利。修复这个问题很烦人。

此外,在执行此操作时,请检查您的编码。谁知道,当有人输入“é”时,也许会插入“é”! (这也会破坏 SQL UPPER()、LOWER()、SQL 排序、LIKE 搜索,基本上没有任何作用)。

我的地址同时包含 ' 和 é。有时,当我收到在线订单时...是的,我收到的信封上实际上印有\\' 和“é”。这就是您如何知道网上商店使用 php!

现在,一旦您的数据库包含正确的数据,就没有什么可以阻止您的用户在其论坛帖子中输入此数据:

<script type="text/javascript"> StealAllYourCookies(); </script>

这就是为什么在将内容输出到 html 时使用 htmlspecialchars() 的原因。

关于php - 如何在显示之前正确显示 "clean"mysql 字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45488735/

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