无论如何,您正在做的事情并不安全。你真的应该明白你在做什么。
mysql_real_escape_string():此函数接受一个字符串并将其转义,以便可以在 SQL 语句中使用。所有这些都是为了让查询解析器清楚什么是数据,什么是查询。了解这一点很重要。
htmlentities()/htmlspecialchars(): 这些函数对字符串进行转义,以便它们可以在 HTML 中使用,而无需 HTML 解析器认为诸如<
或之类的字符"
是 HTML。这些实体变成<
和"
。
您必须在正确的上下文中使用这些函数。通过在查询上下文中使用字符串之前不使用mysql_real_escape_string()
它作为最后接触字符串的东西,您否定了它的大部分值。您应该仅在将数据插入数据库时使用此函数,并且仅在字符串完全形成时使用。最好的办法是根本不使用查询中的数据。将 PDO 与准备好的/参数化查询一起使用。这有效地从查询中删除了数据,消除了任何 SQL 注入的机会。
在您准备好将任意字符串插入 HTML 之前,您不应该使用它。htmlentities()
也就是说,在将内容放入数据库之前不要使用此功能。否则,您会使您的数据在任何其他情况下都很难使用。处理人们这样做的烂摊子真的很麻烦。不要这样做。
现在,如果您看到文字\r
或\n
文本,那么该数据来自其他东西。不是来自您正在使用的两个功能。这些函数都不会插入这样的字符串。
另请参阅: https ://stackoverflow.com/a/7810880/362536