我已经安装了PHP 8.1并开始测试我的旧项目。我使用了如下的过滤器FILTER_SANITIZE_STRING
:
$username = filter_input(INPUT_POST, 'username', FILTER_SANITIZE_STRING);
现在我得到这个错误:
已弃用:常量FILTER_SANITIZE_STRING已弃用
当我使用FILTER_SANITIZE_STRIPPED
时也会发生同样的情况:
已弃用:常量FILTER_SANITIZE_STRIPPED已弃用
我能用什么来代替它呢?
4条答案
按热度按时间ny6fqffe1#
这个过滤器有一个不明确的用途。很难说它到底是要完成什么或什么时候应该使用它。它也与默认的字符串过滤器混淆,因为它的名字,而实际上默认的字符串过滤器被称为
FILTER_UNSAFE_RAW
。PHP社区决定不再支持使用这个过滤器。这个过滤器的行为非常不直观。它删除了
<
和字符串末尾之间的所有内容,或者直到下一个>
。它还删除了所有NUL
字节。最后,它将'
和"
编码为它们的HTML实体。如果您想更换它,您有几个选项:
1.使用默认的字符串过滤器
FILTER_UNSAFE_RAW
,它不做任何过滤。如果你不知道FILTER_SANITIZE_STRING
的行为,你只想使用一个默认的过滤器,它会给予你字符串值,那么就应该使用这个过滤器。1.如果您使用此过滤器来防止XSS漏洞,请将其替换为
htmlspecialchars()
。不要在输入数据上调用此函数。要防止XSS漏洞,您需要对输出进行编码!1.如果你确切地知道过滤器的作用,并且你想创建一个多边形填充,你可以很容易地用正则表达式来完成。
Don’t try to sanitize input. Escape output.
nukf8bse2#
如果要将变量转换为安全的html字符串,则可以使用的最接近的常量是FILTER_SANITIZE_FULL_SPECIAL_CHARS
mqxuamgl3#
从documentation,您应该将其替换为
htmlspecialchars()
。去除标签和HTML编码双引号和单引号,可选地去除或编码特殊字符。可以通过设置FILTER_FLAG_NO_ENCODE_QUOTES禁用引号编码。(从PHP 8.1.0开始弃用,请改用htmlspecialchars()。
“string”过滤器的别名。(从PHP 8.1.0开始已弃用,请改用htmlspecialchars()。
drkbr07n4#
它可以很容易地替换为: