搜索和分页,如何获得搜索项后的形式已提交


Search and pagination, how to get search term after form has been submitted

我正在创建一个带有分页的搜索功能。

我有一个表单,我得到它的POST值。然后使用它搜索数据库并返回一组结果。

结果被分解成多个页面,用户可以点击视图中的页面链接。

我的问题是,如何在多个页面上持久化搜索?

是否应该在第一页得到POST值,并在后续页面我应该把搜索词到url,例如

www.example.com/search/various-keywords/p2

然后获得术语并再次查询数据库,将结果拆分到任何页面,p2, p3, p4等。

有更干净的方法吗?

另外,在url中包含用户输入是否不安全?我应该用某种方式对它进行编码吗?

如果用户在浏览多个页面后点击返回,我会得到"Confirm Form Resubmission"错误。我该如何预防呢?

最好的方法是将搜索词设置为GET变量,这样您就可以随时检索它并将其添加到您想要的任何url中。

只要您转义搜索查询,您应该可以与用户安全,这也将消除重新提交表单错误。

搜索应该使用GET方法,这是RESTful方式。将搜索词添加到URL中(确保已转义):

http://www.example.com/search?q=example+search+term&page=1

如果你有一个<form>,它会负责转义:

<form action="search" method="GET">
    <input type="text" name="q" />
    <input type="submit" value="Search" />
</form>

例如输入test & test,则为search?q=test+%26+test

您可以通过URI传递搜索短语,如www.example.com/search?q=My+Search+Terms&page=1,或者您可以使用CookiesSessions,如果您认为合适。