preg_match 并在双引号内转义
preg_match and escaping when inside double quotes
完全 PHP 新手在这里试图掌握文字和转义,所以提前道歉,这是如此基础。我已经阅读了很多关于 preg_match
的问题,但 none 似乎解决了这个问题。
我有一个旧表单,其中包含使用双引号的已弃用 eregi()
函数的实例:
eregi("\n", $s)
eregi("%0a", $s)
这两行是用于检查注入字符的较长行的一部分。
如果我将函数更新为带有分隔符和尾随 i
的 preg_match
,如下所示:
preg_match("/\n/i", $s)
preg_match("/%0a/i", $s)
我现在还需要用我自己的反斜杠转义 \
and/or %
吗?
谢谢
与其 运行 多次 preg_match()
调用,我建议使用管道 |
将所有无效字符合并为一次调用。
在你的情况下,不需要转义,你可以使用:preg_match(/\n|%0a/,$s)
如果您想添加更多列入黑名单的字符,您可以在 https://regex101.com/
处针对您自己的示例输入测试您的模式
最后,如果您不一定要阻止传入数据,但希望删除列入黑名单的字符,您可以使用 preg_replace()。
完全 PHP 新手在这里试图掌握文字和转义,所以提前道歉,这是如此基础。我已经阅读了很多关于 preg_match
的问题,但 none 似乎解决了这个问题。
我有一个旧表单,其中包含使用双引号的已弃用 eregi()
函数的实例:
eregi("\n", $s)
eregi("%0a", $s)
这两行是用于检查注入字符的较长行的一部分。
如果我将函数更新为带有分隔符和尾随 i
的 preg_match
,如下所示:
preg_match("/\n/i", $s)
preg_match("/%0a/i", $s)
我现在还需要用我自己的反斜杠转义 \
and/or %
吗?
谢谢
与其 运行 多次 preg_match()
调用,我建议使用管道 |
将所有无效字符合并为一次调用。
在你的情况下,不需要转义,你可以使用:preg_match(/\n|%0a/,$s)
如果您想添加更多列入黑名单的字符,您可以在 https://regex101.com/
处针对您自己的示例输入测试您的模式最后,如果您不一定要阻止传入数据,但希望删除列入黑名单的字符,您可以使用 preg_replace()。