PHP 清理和转义特殊字符


PHP Sanitising and escaping special characters

我是PHP的新手,我有一个表单,人们可以在其中向数据库提交值。稍后,这些值将使用JS注入,或者直接放置在HTML文档中。

我正在使用以下内容来清理我的输入:

function sanitise($str){
  $string = htmlspecialchars($str);
  $string = mysql_real_escape_string($str);
  return $string;
}

这样做的问题是,在我的数据库中,带有引号的输入如下所示:input's .这意味着如果我在 JS 中输入该值,引号会搞砸一切。

我尝试这样做以避免引用:

function sanitise($str){
  $string = htmlspecialchars($str);
  $string = mysql_real_escape_string($str);
  return addslashes($string);
}

这会将我的数据库条目转换为如下所示的内容:input''s .这在 JS 中有效,但如果我要直接在 <div></div> 中注入该值,那么反斜杠仍然存在......我对自己做错了什么感到困惑 - 我如何清理我的输入,同时普遍转义 HTML 和 JS 的特殊字符?

清理数据在工作流程的不同步骤中意味着不同的事情。您也不想重复执行此操作,否则您将传播转义字符。

现代方法是尝试以正确的表示形式处理数据。这意味着如果你有一个名称O'Niell那么这就是字符串的实际内容。通常这意味着来自 Web 浏览器的数据可以按提供的方式使用。(只需确保禁用魔术引号即可。

当您将数据传递到其他层时,它就会被清理。最简单的情况是在将其用作数字之前检查它是一个数字,例如查找数据库行。下一个最简单的方法是使用诸如 mysqli_real_escape_string 之类的函数,就在您组装 SQL 时,而不是更早。(顺便说一句,使用准备好的语句会为你做到这一点。将数据放入URL或Javascript中同样是相同的:在发出数据时转义数据。

尽可能晚地执行此操作可以解决两个问题。首先,您没有处理转义数据的问题。第二个是这样你就不会重复转义数据。