php 常量FILTER_SANITIZE_STRING已弃用

pdkcd3nj  于 2023-02-03  发布在  PHP
关注(0)|答案(4)|浏览(287)

我已经安装了PHP 8.1并开始测试我的旧项目。我使用了如下的过滤器FILTER_SANITIZE_STRING

$username = filter_input(INPUT_POST, 'username', FILTER_SANITIZE_STRING);

现在我得到这个错误:
已弃用:常量FILTER_SANITIZE_STRING已弃用
当我使用FILTER_SANITIZE_STRIPPED时也会发生同样的情况:
已弃用:常量FILTER_SANITIZE_STRIPPED已弃用
我能用什么来代替它呢?

ny6fqffe

ny6fqffe1#

这个过滤器有一个不明确的用途。很难说它到底是要完成什么或什么时候应该使用它。它也与默认的字符串过滤器混淆,因为它的名字,而实际上默认的字符串过滤器被称为FILTER_UNSAFE_RAW。PHP社区决定不再支持使用这个过滤器。
这个过滤器的行为非常不直观。它删除了<和字符串末尾之间的所有内容,或者直到下一个>。它还删除了所有NUL字节。最后,它将'"编码为它们的HTML实体。
如果您想更换它,您有几个选项:
1.使用默认的字符串过滤器FILTER_UNSAFE_RAW,它不做任何过滤。如果你不知道FILTER_SANITIZE_STRING的行为,你只想使用一个默认的过滤器,它会给予你字符串值,那么就应该使用这个过滤器。
1.如果您使用此过滤器来防止XSS漏洞,请将其替换为htmlspecialchars()。不要在输入数据上调用此函数。要防止XSS漏洞,您需要对输出进行编码!
1.如果你确切地知道过滤器的作用,并且你想创建一个多边形填充,你可以很容易地用正则表达式来完成。

function filter_string_polyfill(string $string): string
{
    $str = preg_replace('/\x00|<[^>]*>?/', '', $string);
    return str_replace(["'", '"'], ['&#39;', '&#34;'], $str);
}

Don’t try to sanitize input. Escape output.

nukf8bse

nukf8bse2#

如果要将变量转换为安全的html字符串,则可以使用的最接近的常量是FILTER_SANITIZE_FULL_SPECIAL_CHARS

mqxuamgl

mqxuamgl3#

documentation,您应该将其替换为htmlspecialchars()

  • 过滤器_消毒_字符串 *

去除标签和HTML编码双引号和单引号,可选地去除或编码特殊字符。可以通过设置FILTER_FLAG_NO_ENCODE_QUOTES禁用引号编码。(从PHP 8.1.0开始弃用,请改用htmlspecialchars()。

  • 过滤器_消毒_剥离 *

“string”过滤器的别名。(从PHP 8.1.0开始已弃用,请改用htmlspecialchars()。

drkbr07n

drkbr07n4#

它可以很容易地替换为:

FILTER_UNSAFE_RAW

相关问题