PHP函数来逃避MySQL regexp语法

ako*_*sch 11 php regex mysql escaping

我正在寻找类似于preg_quote的东西,但是对于MySQL regexp语法.

有任何想法吗?

bob*_*nce 11

MySQL regexp是'扩展'POSIX变体(ERE),在PHP中可用作已弃用的ereg_函数.

不幸的是,ereg_quote在PHP 中没有,但是PCRE的特殊字符是ERE特殊字符的超集,而反斜杠 - 逃避非特殊标点符号并不会对其造成伤害,因此您可以preg_quote安全地使用它.

(当然,您需要参数化查询或mysql_real_escape_string 引用之后,以阻止反斜杠被误解为MySQL的非ANSI标准字符串文字转义.)

  • 稍微警告:空控制字符.`preg_quote`将其转义为`\ 000`,这是MySQL无法识别的格式.但是,MySQL的正则表达式引擎无论如何都无法处理空字符,它将它们作为终结符. (3认同)
  • 我必须使用str_replace('?','\\?',preg_quote()),因为preg_quote()可以产生?什么时候它不知道特定的UTF8字符.而且?需要在正则表达式中进行转义. (2认同)

小智 5

可悲的是,PHP preg_quote()通过转义MySQL的REGEXP不理解的冒号(:)来弄乱MySQL REGEXP