【问题标题】:PHP is adding slashes to characters when inserting into MySQLPHP 在插入 MySQL 时向字符添加斜杠
【发布时间】:2013-08-04 04:50:52
【问题描述】:

例如,当在文本字段中输入 ' 时,PHP 会在其前面放置一个 \。

我正在使用以下内容进行过滤:

$comment_body = $_POST['comment_body'];
$comment_body = nl2br(htmlspecialchars($comment_body));
$comment_body = mysqli_real_escape_string($db_conx,$comment_body); 

如何阻止这个斜线出现?

【问题讨论】:

  • mysqli_real_escape_string 函数调用使用反斜杠对单引号进行转义,以防止 SQL 注入。
  • 这就是你的 mysqli_real_escape_string 正在做的事情。应该是这样的
  • 我知道,但是我在其他网站上使用过它,并且 \ 没有发布到数据库中。有没有办法阻止它被发布或阻止它与 \ 一起显示而不删除 mysqli_real_escape_string?

标签: php html mysql security filtering


【解决方案1】:

您应该对上下文进行清理:

当保存到数据库时,仅使用 mysqli_real_escape_string()。将变量输出到 HTML 时,只需使用 htmlspecialchars()

自动添加斜线可能是由于 ma​​gic_quotes_gpc 的设置,该设置已在较新版本的 PHP 中删除,但您可以在 phpinfo(); 中检查您的设置;

【讨论】:

  • 我同意你不想存储 htmlspecialchars 和 nl2br 的结果。
【解决方案2】:

这就是 mysqli_real_escape_string 所做的。这应该只在将数据放入数据库时​​使用。如果您要输出 $comment_body,只需去掉 sn-p 的最后一行。如果您发生双重转义,则可能是magic quotes 配置指令的结果。

【讨论】:

  • 我知道,但是我在其他网站上使用过它,并且 \ 没有发布到数据库中。有没有一种方法可以阻止它被发布或阻止它与 \ 一起显示而不删除 mysqli_real_escape_string?顺便说一句,我实际上是把它插入到数据库中
  • 就是这样,服务器更新到最新版本的PHP。有没有办法在查询数据库时隐藏\?
  • @James ... 那不会是 5.4 中删除的魔术引号
  • 实际上,我的错,它运行 5.4 @Orangepill
  • @james 是否有可能网站上的某个人通过执行$_POST = array_map("addslashes", $_POST); 之类的操作来修复缺少魔术引号的问题?
【解决方案3】:

这可能是因为你有魔术引号:magic_quotes_gpc 如果是这种情况,您可以使用 this 禁用它

【讨论】:

    猜你喜欢
    • 2013-06-18
    • 1970-01-01
    • 2018-12-04
    • 2011-04-06
    • 2014-04-07
    • 2013-05-29
    • 2019-07-04
    • 1970-01-01
    • 2017-11-30
    相关资源
    最近更新 更多