首页 >后端开发 >php教程 >如何替换已弃用的 PHP 8.1 字符串清理过滤器(FILTER_SANITIZE_STRING 和 FILTER_SANITIZE_STRIPPED)?

如何替换已弃用的 PHP 8.1 字符串清理过滤器(FILTER_SANITIZE_STRING 和 FILTER_SANITIZE_STRIPPED)?

DDD
DDD原创
2024-12-05 07:13:13521浏览

How to Replace Deprecated PHP 8.1 String Sanitization Filters (FILTER_SANITIZE_STRING and FILTER_SANITIZE_STRIPPED)?

替换已弃用的过滤器常量:FILTER_SANITIZE_STRING 和 FILTER_SANITIZE_STRIPPED

在 PHP 8.1 中,常量过滤器 FILTER_SANITIZE_STRING 和FILTER_SANITIZE_STRIPPED 已被弃用。这引起了以前使用这些过滤器进行字符串清理的开发人员的担忧。

弃用的原因

这些过滤器常量被认为令人困惑且其用途不明确。它们的功能与其他字符串过滤器重叠,导致混乱和不一致的结果。 PHP 社区决定停止支持。

替换选项

有多个选项可用于替换这些已弃用的过滤器:

  • 使用FILTER_UNSAFE_RAW:这是默认的字符串过滤器,不执行任何过滤。如果您不需要任何特定的清理,它是合适的。
  • 使用 htmlspecialchars() 进行 XSS 预防:如果您使用 FILTER_SANITIZE_STRING 主要是为了防止 XSS 漏洞,请将其替换为 htmlspecialchars()。应在输出而不是输入上调用此函数,以确保有效保护。
  • 创建一个 Polyfill: 如果您需要已弃用过滤器的确切行为,您可以创建一个 Polyfill使用正则表达式。

以下代码演示了一个 polyfill 函数filter_string_polyfill:

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

请记住,清理输入不如转义输出有效。在显示或使用潜在易受攻击的数据之前,重点关注对其进行编码。

以上是如何替换已弃用的 PHP 8.1 字符串清理过滤器(FILTER_SANITIZE_STRING 和 FILTER_SANITIZE_STRIPPED)?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn