【问题标题】:pagination and search form issue分页和搜索表单问题
【发布时间】:2012-07-14 17:36:55
【问题描述】:

我有非常基本的分页脚本和带有 ~4 个字段的搜索表单,action="get" 现在我的问题是,当我提交表单时,我得到这样的 url:

user/people/1/?search=true&country=uk&age=20&online=true ... and so on

所以在我提交表单后一切都很好,但是当我转到页面 2 时,我的 url 更改为:

 user/people/2 

所以我的搜索参数消失了,这就是我呈现链接的方式

 href="user/people/<?=$next?>"

所以我的问题是保留参数的最佳方法是什么,因为现在我只能想到 for 循环并通过合并所有 $_GET 值来构建我的链接,我应该这样做吗?

【问题讨论】:

    标签: php html


    【解决方案1】:

    只需附加$_SERVER[ 'QUERY_STRING' ](确保先添加htmlspecialchars())。

    href="user/people/<?php echo htmlspecialchars( "{$next}?{$_SERVER[ 'QUERY_STRING' ]}" ); ?>"
    

    顺便说一句,PHP 短标签&lt;?= ?&gt; 不可移植,因此您应该考虑不使用它们,而改用&lt;?php echo ?&gt;

    更新:

    @Wrikken 在他们的回答中提出了几个要点:

    1) 将 ENT_QUOTES 作为第二个参数传递给 htmlspecialchars() 如果单引号属性值(或将其覆盖在将来更改为单引号)很重要.无论如何,这对我来说很容易忘记,因为我几乎总是用双引号引起来。不幸的是,它进一步膨胀了一个已经被长函数名膨胀的调用。

    2) 如果您只是按原样传递查询字符串,那么我当然更喜欢使用$_SERVER[ 'QUERY_STRING' ] 而不是http_build_query( $_GET )。但是,如果您需要更改某些查询参数,http_build_query() 将是票证。你可以在我的PHP faceted browser 中看到一个例子。

    【讨论】:

      【解决方案2】:

      要么:

      ...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);?>"
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-02-13
        • 2011-08-12
        • 1970-01-01
        • 2019-11-25
        • 2017-06-22
        • 1970-01-01
        • 1970-01-01
        • 2018-07-22
        相关资源
        最近更新 更多