0

我对以下代码有疑问:pastebin。例如:

/^\/index\.php\/index\/home\/(\w+)$/

它在 .php 扩展名之前添加了一个斜杠。任何想法如何解决它?

4

1 回答 1

2

好吧,如果您将该示例作为 uri 传递,我会在第 10 行看到您有preg_quote($uri). 应该是这个原因。由于点 (.) 在正则表达式中具有含义,因此该函数正在转义它。

但我相信这就是你想要的,因为如果你去掉那个斜杠,你的正则表达式将匹配任何字符而不是点(包括点)。因此,其中任何一个都是有效的:

indexBphp
index-php
indexmphp
index.php
etc...

正则表达式中的点表示匹配该位置的任何字符。所以我相信没有错,对吧?

如果您仍然想要那个点,解决此问题的一种方法是在两个单独的部分中构建正则表达式:

$urlDivided = explode('.php', $url);
$this->finalRegex = preg_quote($urlDivided[0]) . '.php' . preg_quote($urlDivided[1]);

显然,上面的方法假设你总是在 url 中有 '.php' 扩展名。你应该做健全性检查。

于 2013-05-11T08:38:10.190 回答