Обработка слешей по параметрам URL

1

Я сталкиваюсь с некоторыми проблемами, пытаясь угадать, как обрабатывать URL-адреса с параметрами на Symfony + Twig.

У меня есть этот маршрут:

<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 передается как есть (т.е. не кодируется URL ранее) как на конструкторе сущности, так и на его получателе (getURLKeyword).

Однако при визуализации шаблона я получаю этот код HTML:

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

(Если я удалю url_encode из шаблона, Twig вызывает путь вызова ошибки()).

Целевой контроллер имеет следующий код:

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 правильной кодировкой или необходимо использовать двойное кодирование (AC% 252FDC) в Symfony? И, если можно использовать первую (правильную) кодировку URL-адресов, что я делаю неправильно?

Теги:
twig
url-routing
url-encoding
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.

  • 0
    Благодарю за ваш ответ. Однако удаление кодировки / декодирования делает связанный URL-адрес /index.php/artist/AC/DC/ (т. Е. Косые черты вообще не кодируется), поэтому {kw} может конфликтовать с другими частями пути маршрута. Например, если позже я добавлю новый маршрут для «/ artist / {kw} / info» и у меня будет kw, например «что-то / информация», artist.front станет «/ artist / что-то / info» (т.е. kw не закодирован вообще) который конфликтует со страницей "/ artist / {kw} / info" с kw = что-то. Я думаю, что сгенерированный URL должен быть в этом примере "/ Artist / что-то% 2finfo / info" (с URL-кодом части kw).

Ещё вопросы

Сообщество Overcoder
Наверх
Меню