使用此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&%3Bsort=1
&%3B
是&
的编码形式,只是&
个字符。
所以问题是当我现在在我的控制器中检查我的$ _GET参数时,不再传递sort
参数。它现在被称为&%3Bsort
......它引发了各种各样的问题。
两个问题:
如何避免此问题?我可以解码控制器中的$_GET
参数键值吗?
为什么symfony首先编码&
个字符?这是一个完全可以接受的URI字符。哎呀,即使是编码值,&%3B
也包含&
!!!
答案 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') )))
...超越输出逃逸。不完全确定它是否会按原样运行。