【问题标题】:Warning: preg_match() [function.preg-match]: Unknown modifier '-'警告:preg_match() [function.preg-match]:未知修饰符“-”
【发布时间】:2013-10-24 21:33:08
【问题描述】:

我正在开发一个 Wordpress 网站,最近我开始收到以下警告:

警告:preg_match() [function.preg-match]:未知修饰符'-'

当我将永久链接结构更改为 /%postname%/ 时开始,这是 BuddyPress 运行所必需的。如果使用默认的永久链接结构,问题就会消失。

这是发生错误的wp-includes/class-wp.php 中的代码:

if ( preg_match("#^$match#", $request_match, $matches) ||
 preg_match("#^$match#", urldecode($request_match), $matches) ) {

【问题讨论】:

标签: preg-match


【解决方案1】:

这是因为-/是特殊符号,你可以把这段代码改成:

if ( preg_match("/^".preg_quote($match)."/", $request_match, $matches) ||
 preg_match("/^".preg_quote($match)."/", urldecode($request_match), $matches) ) {

但我认为问题在 wp 的核心逻辑中更深层次

【讨论】:

  • 感谢 Ilya,但问题仍然存在。您很可能是正确的,问题出在更深的地方。
  • 问题在同一行?
  • - 在字符类之外没有特殊含义。
  • @CasimiretHippolyte 是的,值也有/,所以- 成为修饰符
【解决方案2】:

如果没有$match 变量内容,很难知道问题出在哪里,但如果您收到此警告,那是因为$match 包含#-(即使用的模式分隔符和- 字符)。那么# 之后的所有字符都被视为修饰符。

您可以尝试将分隔符(并祈祷)更改为~

if ( preg_match("~^$match~", $request_match, $matches) ||
preg_match("~^$match~", urldecode($request_match), $matches) ) {

如果不起作用,请尝试其他分隔符。

【讨论】:

    猜你喜欢
    • 2011-03-20
    • 2011-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-16
    • 2013-09-12
    相关资源
    最近更新 更多