如果我按正常方式执行重定向:
$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,但由于这种愚蠢的转义,它似乎只是很多开销。
感谢。
答案 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)