2010-04-06 32 views
2

如果我做一个重定向的动作正常:Symfony 1.4:是否有可能防止转义URL的转义?

$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); 

...并生成以下URL:

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

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

谢谢。

回答

1

当你说“正确显示”,你可能会丢失的事实,&是变量分离&的URL中的“正确”的表示 - 合式X(HT)ML,&必须被编码为&

也就是说,脚本中的行为是不寻常的,因为在这两个示例中您都会期待相同的行为。我想这些特定的路由不参数传送到您的路由规则,但我希望的symfony作为默认slashify你的变量是这样的:

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

这不是与你的字符串干扰一些奇怪的PHP环境,是它?

编辑:我已经用symfony 1.3.3测试过了,它按照我的建议去掉了变量。我倾向于认为这是导致它的PHP/Apache设置。检查你的php.ini文件中的arg_separator.output设置。

+0

@Raise:没有不寻常的PHP设置或类似的东西。通过“正确显示”我只是表示分开请求参数的适当的&符号。现在这个“&{banana} = {2}”会被symfony理解为“&{amp; banana} = {2}”,这是完全错误的。 – Tom 2010-04-06 21:41:19

+0

Slashifying ...是的,这将通过routing.yml关联。但是,我有25个变量串在一起,我不想在路由中声明,但只想保留为GET查询字符串以供进一步操作。 – Tom 2010-04-06 23:51:58

+0

没有真正解决,但关闭这个问题/标记上述为接受。 – Tom 2010-04-12 18:23:05

1

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

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

这工作得很好,我(的&的不逃到& AMP)