【问题标题】:preg_match and escaping when inside double quotespreg_match 并在双引号内转义
【发布时间】:2017-03-31 00:39:59
【问题描述】:

完整的PHP新手在这里试图掌握文字和转义,所以提前道歉,这是如此基本的。我在preg_match 上阅读了很多问题,但似乎没有一个能够解决这个问题。

我有一个旧表单,其中包含使用双引号的已弃用 eregi() 函数的实例:

eregi("\n", $s)
eregi("%0a", $s)

这两行是用于检查注入字符的较长行的一部分。

如果我将函数更新为 preg_match 并带有分隔符和尾随 i,如下所示:

preg_match("/\n/i", $s)
preg_match("/%0a/i", $s)

我现在是否还需要用自己的反斜杠转义 \ 和/或 %

谢谢

【问题讨论】:

  • 不,不需要转义。您唯一需要转义的是引号内引号的正常实例。否则,在两个正斜杠中是正常的 RegEx 语法

标签: php escaping preg-match newline double-quotes


【解决方案1】:

与其运行多个preg_match() 调用,我建议使用管道| 将所有无效字符组合到一个调用中。

在您的情况下,不需要转义,您可以使用:preg_match(/\n|%0a/,$s)

如果您希望添加更多列入黑名单的字符,您可以在https://regex101.com/ 上针对您自己的示例输入测试您的模式

最后,如果您不一定要阻止传入数据,但希望删除列入黑名单的字符,您可以使用preg_replace()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-06-17
    • 1970-01-01
    • 1970-01-01
    • 2011-04-19
    • 2015-11-06
    • 1970-01-01
    相关资源
    最近更新 更多