为什么Symfony逃脱&使用url_for()时的字符?

时间:2011-08-01 16:32:43

标签: php http symfony1 uri

使用此Symfony页面,我在URI中传递$_GET个参数,如下所示:

http://www.mysite.com/article?page=4&sort=1

进入我的布局后,页面中的某些链接需要包含相同的查询字符串。

无论如何,使用Symfony的url_for()命令,我正在制作这样的网址:

$url = url_for('article/index?.http_build_query($_GET));

这样它就会使用$ _GET变量创建一个新的url。对于某些链接,我提前更改$ _GET值,如$_GET['sort']=0;生成url之前。这就是我使用这种方法的原因。

无论如何,当我查看生成的URL时,它现在看起来像这样:

http://www.mysite.com/article?page=4&amp%3Bsort=1

&amp%3B&的编码形式,只是&个字符。

所以问题是当我现在在我的控制器中检查我的$ _GET参数时,不再传递sort参数。它现在被称为&amp%3Bsort ......它引发了各种各样的问题。

两个问题:

  1. 如何避免此问题?我可以解码控制器中的$_GET参数键值吗?

  2. 为什么symfony首先编码&个字符?这是一个完全可以接受的URI字符。哎呀,即使是编码值,&amp%3B也包含& !!!

2 个答案:

答案 0 :(得分:2)

我相信,这是因为您的应用程序中的输出转义是ON。因此,$ _GET数组包含在sfOutputEscaperArrayDecorator类中。您可以使用以下代码获取原始值:$_GET->getRawValue()

$url = url_for('article/index?.http_build_query($_GET->getRawValue()))

或者您可以使用sfOutputEscaper :: unescape

解码结果查询
$url = url_for('article/index?.sfOutputEscaper::unescape(http_build_query($_GET)));

希望这会有用。

答案 1 :(得分:0)

最好使用Symfony自己的方法获取请求参数。例如,在模板中,使用:

$sf_request->getParameter('some_param');

如果您必须使用$ _GET,请尝试:

 (((    $sf_data->getRaw('_GET')   )))

...超越输出逃逸。不完全确定它是否会按原样运行。