Symfony 1.4: возможно ли предотвратить экранирование URL перенаправления? - PullRequest
2 голосов
/ 06 апреля 2010

Если я делаю перенаправление в действии как обычно:

$this->redirect('@mypage?apple=1&banana=2&orange=3');

... Symfony выдает правильный URL:

/something/something?apple=1&banana=2&orange=3

Тем не менее, по какой-то странной причине сбежало следующее:

$string = 'apple=1&banana=2&orange=3';
$this->redirect('@mypage?'.$string);

... и создается следующий URL:

/something/something?apple=1&banana=2&orange=3

Есть ли способ избежать этого, чтобы амперсанды правильно отображались в URL? Я перепробовал все, что мог придумать, и это сводит меня с ума. Мне это нужно в ситуации, когда я извлекаю сохраненный запрос в виде строки из базы данных и просто хочу зафиксировать его на URL. Мне известно, что я могу сгенерировать массив из строки, а затем сгенерировать новый URL-адрес из массива, но из-за этого глупого побега это может показаться слишком сложным.

Спасибо.

Ответы [ 2 ]

1 голос
/ 29 мая 2010

Я считаю, что это ваша лучшая ставка.

$url = $this->getController()->genUrl('search/list');
$this->redirect($url.'?q='.$q.'&g='.$g);

Это прекрасно работает для меня (символы & не экранированы в & amp)

1 голос
/ 07 апреля 2010

Когда вы говорите «появляются правильно», вы можете упустить тот факт, что & является «правильным» представлением разделителя переменных & в URL - для правильно сформированного X (HT) ML, & должен быть закодирован как &

Тем не менее, поведение в вашем скрипте необычно в том смысле, что вы ожидаете одинакового поведения в обоих примерах. Я предполагаю, что это не специфичные для маршрутизации параметры вашего правила маршрутизации, хотя я бы ожидал, что Symfony по умолчанию сократит ваши переменные следующим образом:

/something/something/apple/1/banana/2/orange/3

Это не какая-то странная настройка PHP, которая мешает вашим строкам, не так ли?

РЕДАКТИРОВАТЬ : я тестировал его с помощью symfony 1.3.3, и он сокращал переменные, как я и предлагал. Я склонен думать, что причиной этого является настройка PHP / Apache. Проверьте файл php.ini на наличие параметра arg_separator.output.

...