Symfony 当url包含";";它不再与请求的路由匹配

Symfony 当url包含";";它不再与请求的路由匹配,symfony,routing,symfony-2.1,Symfony,Routing,Symfony 2.1,这不仅仅是一个长谈来解释这个bug,还有一个屏幕截图来解释一切: 一旦我们在url中输入与rss\u类别对应的“e”,它就不再与路线匹配了。见: ! 我们通过强制要求{slugCat}接受任何^(以前没有要求)来解决这个问题。 如果这对某人有帮助,如果有人有一个合理的解释,我会很高兴听到(在Symfony 2.1.1下运行)。哇,很难。这是因为在编译路由时,symfony尝试使用变量名前面的字符作为分隔符。此代码来自RouteCompiler.php: // Use th

这不仅仅是一个长谈来解释这个bug,还有一个屏幕截图来解释一切:

一旦我们在url中输入与
rss\u类别
对应的“e”
它就不再与路线匹配了。见: !

我们通过强制要求
{slugCat}
接受任何
^
(以前没有要求)来解决这个问题。


如果这对某人有帮助,如果有人有一个合理的解释,我会很高兴听到(在Symfony 2.1.1下运行)。

哇,很难。这是因为在编译路由时,symfony尝试使用变量名前面的字符作为分隔符。此代码来自RouteCompiler.php:

            // Use the character preceding the variable as a separator
            $separators = array($match[0][0][0]);

            if ($pos !== $len) {
                // Use the character following the variable as the separator when available
                $separators[] = $pattern[$pos];
            }
            $regexp = sprintf('[^%s]+', preg_quote(implode('', array_unique($separators)), self::REGEX_DELIMITER));
Symfony这样做是因为通常在变量名之前会有某种分隔符,比如/upload/rssArticle/{slugCat},其中“/”将是分隔符,它试图让您使用此分隔符来分隔包含多个变量的路由中的变量。在您的情况下,变量前面的字符是“e”,该字符成为分隔符,这就是为什么您的路由不匹配的原因。如果您的路径是/upload/rssArticles{slugCat},那么“s”将是分隔符,而这将是您无法使用的字符


也许您可以在symfony路由器组件上创建一个问题。我认为,如果前面的字符是字母或数字,则不应将其用作分隔符。

结果表明,对于此问题已经有一个拉取请求: