我有非常基本的分页脚本和搜索表单,有~4个字段,action="get"
现在我的问题是,当我提交表单时,我得到这样的网址:
user/people/1/?search=true&country=uk&age=20&online=true ... and so on
所以在我提交表单后,一切都很好,但是当我转到页面2
时,我的网址变为:
user/people/2
所以我的搜索参数消失了,这就是我渲染链接的方式
href="user/people/<?=$next?>"
所以我的问题是保持参数的最佳方法是什么,因为现在我只能想到for
循环并通过合并所有$_GET
值来构建我的链接,我应该这样做?
答案 0 :(得分:1)
只需附加$_SERVER[ 'QUERY_STRING' ]
(请务必先htmlspecialchars()
)。
href="user/people/<?php echo htmlspecialchars( "{$next}?{$_SERVER[ 'QUERY_STRING' ]}" ); ?>"
顺便说一句,PHP短标记<?= ?>
不可移植,因此您应该考虑不使用它们,而是使用<?php echo ?>
代替。
更新
@Wrikken在答案中提出了几个好点:
1)将ENT_QUOTES
作为第二个参数传递给htmlspecialchars()
,如果单引用属性值(或覆盖它被改为单引号)将非常重要在将来)。无论如何,这很容易忘记,因为我几乎总是双引用属性值。不幸的是,它进一步膨胀了一个已经因长函数名称而膨胀的调用。
2)如果您只是按原样传递查询字符串,那么我当然更喜欢使用$_SERVER[ 'QUERY_STRING' ]
而不是http_build_query( $_GET )
。但是,如果您需要更改某些查询参数,http_build_query()
将成为故障单。您可以在我的PHP faceted browser中找到相关示例。
答案 1 :(得分:1)
或者:
...ople/?<?php echo htmlspecialchars($_SERVER['QUERY_STRING'], ENT_QUOTES);?>"
或者:
...ople/?<?php echo htmlspecialchars(http_build_query($_GET), ENT_QUOTES);?>"
或者:
...ople/?<?php echo htmlspecialchars(http_build_query($some_custom_array), ENT_QUOTES);?>"