Symfony 1.4:是否可以防止重定向URL的转义?

时间:2010-04-06 19:24:58

标签: url redirect symfony1 escaping html-entities

如果我按正常方式执行重定向:

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

... Symfony生成正确的网址:

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

然而,由于一些奇怪的原因,以下内容被转义:

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

...并生成以下网址:

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

有没有办法避免这种转义并在网址中正确显示&符号?我已经尝试了所有我能想到的东西,这让我很生气。我需要这种情况,我将一个保存的查询作为数据库中的字符串拉出来,并且只想将其锁定到URL上。我知道我可以从字符串生成一个数组,然后从数组中生成一个全新的URL,但由于这种愚蠢的转义,它似乎只是很多开销。

感谢。

2 个答案:

答案 0 :(得分:1)

当您说“正确显示”时,您可能会错过&是网址中变量分隔符&的“正确”表示的事实 - 对于格式良好的X(HT)ML ,&必须编码为&

也就是说,脚本中的行为是不寻常的,因为在两个示例中您都期望相同的行为。我想这些不是路由规则中特定于路由的参数,虽然我希望symfony默认为你的变量做斜杠化,如下所示:

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

这不是一些奇怪的PHP设置干扰你的字符串,是吗?

编辑:我已经使用symfony 1.3.3对其进行了测试,并按照我的建议对变量进行了大幅缩减。我倾向于认为这是一个导致它的PHP / Apache设置。检查php.ini文件中的arg_separator.output设置。

答案 1 :(得分:1)

我相信这是你最好的选择。

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

这对我来说很合适(& s不会转义为& amp)