处理URL参数的斜杠

问题描述 投票:1回答:1

我遇到了一些问题,试图猜测如何在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编码,我做错了什么?

php symfony twig url-routing urlencode
1个回答
1
投票

尝试:

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

并删除url编码/解码。

© www.soinside.com 2019 - 2024. All rights reserved.