缩短URL GET选项

时间:2017-05-21 19:36:23

标签: php html mysql url

我有一个目录类型的应用程序,其中包含许多不同的过滤选项,允许用户限制结果,例如:

<input type="checkbox" name="filters[1][]" value="4" /> Filter 1-4<br />
<input type="checkbox" name="filters[1][]" value="5" /> Filter 1-5<br />
<input type="checkbox" name="filters[1][]" value="6" /> Filter 1-6<br />
<input type="checkbox" name="filters[1][]" value="7" /> Filter 1-7<br />
<input type="checkbox" name="filters[1][]" value="8" /> Filter 1-8<br />
<input type="checkbox" name="filters[1][]" value="9" /> Filter 1-9<br />

<input type="checkbox" name="filters[2][]" value="10" /> Filter 2-10<br />
<input type="checkbox" name="filters[2][]" value="11" /> Filter 2-11<br />
<input type="checkbox" name="filters[2][]" value="12" /> Filter 2-12<br />
<input type="checkbox" name="filters[2][]" value="13" /> Filter 2-13<br />

<input type="checkbox" name="filters[misc][]" value="1" /> Filter Misc-1<br />
<input type="checkbox" name="filters[misc][]" value="test" /> Filter Misc-test<br />
<input type="checkbox" name="filters[misc][]" value="2" /> Filter Misc-2<br />
<input type="checkbox" name="filters[misc][]" value="3" /> Filter Misc-3<br />
<input type="checkbox" name="filters[misc][]" value="4" /> Filter Misc-4<br />

<select name="select">
<option value="">All</option>
<option value="1">Filter Select-1</option>
<option value="2">Filter Select-2</option>
<option value="3">Filter Select-3</option>
</select>

有很多这样的选择,随着时间的推移,选择可能会变得更大。我想知道在将这些选项发送到网址时是否有任何方法可以压缩这些选项,这样我就不会得到一个非常长且难以理解的地址。

我唯一能想到的是提前将所有可能的组合保存到数据库中,然后引用ID ...但考虑到大量可能的组合,这可能是不现实的。还有更好的选择吗?

如果可能的话,我会跟example.com?filters=something_relatively_short_and_simple之类的事情

1 个答案:

答案 0 :(得分:1)

您可以创建代码,将搜索参数列表(作为JSON)保存在数据库表(或可能是缓存)中,并返回一个令牌(基于用户的ID,然后是{{1中新创建的条目的ID)表)。

然后,您可以通过调用Queries

重现搜索查询

表格如下:

http://who.cares/?token=0acb087454d65ca63

更新

如果这些查询来自公共网站(而不是我假设的某些后端CMS / CRM),那么最好删除CREATE TABLE Queries ( `query_id` SERIAL PRIMARY KEY, `account_id` BIGINT UNSIGNED NULL DEFAULT NULL, `token` CHAR(32) NOT NULL , `created_on` INT(11) NOT NULL, `used_on` INT(11) NULL DEFAULT NULL, `parameters` TEXT, KEY (`account_id`), UNIQUE KEY (`token`), KEY (`used_on`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; 部分,然后从中生成account_id用户查询参数的JSON。