Dha*_*man 81 php sanitization filter php-8.1
我已经安装了 PHP 8.1,并开始测试我的旧项目。FILTER_SANITIZE_STRING我已经像这样使用了过滤器:
$username = filter_input(INPUT_POST, 'username', FILTER_SANITIZE_STRING);
Run Code Online (Sandbox Code Playgroud)
现在我得到这个错误:
已弃用:常量 FILTER_SANITIZE_STRING 已弃用
当我使用时也会发生同样的情况FILTER_SANITIZE_STRIPPED:
已弃用:常量 FILTER_SANITIZE_STRIPPED 已弃用
我可以用什么来代替它?
Dha*_*man 87
该过滤器的用途不明确。很难说它到底要实现什么目的或何时应该使用它。由于其名称,它也与默认字符串过滤器混淆,而实际上默认字符串过滤器被称为FILTER_UNSAFE_RAW。PHP 社区决定不再支持使用此过滤器。
这个过滤器的行为非常不直观。它删除了字符串之间<和字符串末尾或直到下一个>. 它还删除了所有NUL字节。最后,它编码\'并"编码到它们的 HTML 实体中。
如果您想更换它,您有以下几种选择:
\nFILTER_UNSAFE_RAW使用不执行任何过滤的默认字符串过滤器。如果您不了解以下行为,则应使用此方法FILTER_SANITIZE_STRING并且只想使用默认过滤器来为您提供字符串值,则应该使用此方法。
如果您使用此过滤器来防止 XSS 漏洞,则将其用法替换为htmlspecialchars(). 不要对输入数据调用此函数。为了防止 XSS,您需要对输出进行编码!
如果您确切地知道该过滤器的作用并且想要创建一个polyfill,则可以使用正则表达式轻松完成此操作。
\nfunction filter_string_polyfill(string $string): string\n{\n $str = preg_replace(\'/\\x00|<[^>]*>?/\', \'\', $string);\n return str_replace(["\'", \'"\'], [\''\', \'"\'], $str);\n}\nRun Code Online (Sandbox Code Playgroud)\n