处理URL参数的斜杠

时间:2015-07-10 02:27:30

标签: php symfony twig url-routing urlencode

我在尝试猜测如何使用Symfony + Twig上的参数来处理URL时遇到了一些问题。

我有这条路线:

<route id="artist.front" path="/artist/{kw}/">
<default key="_controller">App\Web\Controllers\Front::homePage</default>
</route>

这段代码在Twig模板上:

{% autoescape false %}
<a href="{{ path('artist.front',{'kw':a.urlkeyword|url_encode} )}}">{{ a.name }}</a>
{% endautoescape %}

urlkeyword参数在实体构造函数和getter(getURLKeyword)上按原样传递(即先前未进行URL编码)。

然而,在渲染模板时,我得到了这个HTML代码:

<a href="/index.php/artist/AC%252FDC/">AC/DC</a>

(如果我从模板中删除url_encode,则抛出一个错误调用path())。

目标控制器具有以下代码:

public function artistPage($kw)
{
    $decoded = urldecode($kw);
    $this->log->info("kw:      {$kw}");
    $this->log->info("decoded: {$decoded}");
}

和回声:

kw:      AC%2FDC 
decoded: AC/DC 

所以我认为kw是从控制器中正确读取的,但是我知道URL应该编码为AC%2FDC而不是第一个地方的最终HTML代码:URLEncoded字符串被编码两次。

AC%2FDC是正确的编码,还是必须在Symfony中使用双重编码(AC%252FDC)?而且,如果可以使用第一个(正确的)URL编码,我做错了什么?

1 个答案:

答案 0 :(得分:1)

尝试:

<route id="artist.front" path="/artist/{kw}/">
    <default key="_controller">App\Web\Controllers\Front::homePage</default>
    <requirement key="kw">.+</requirement>
</route>

删除网址编码/解码。