Php 缩短URL获取选项

Php 缩短URL获取选项,php,html,mysql,url,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[

我有一个目录类型的应用程序,它有一系列不同的过滤选项,允许用户限制结果,例如:

<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>
过滤器1-4
过滤器1-5
过滤器1-6
过滤器1-7
过滤器1-8
过滤器1-9
过滤器2-10
过滤器2-11
过滤器2-12
过滤器2-13
过滤器Misc-1
过滤器杂项测试
过滤器Misc-2
过滤器Misc-3
过滤器Misc-4
全部的 过滤器选择-1 过滤器选择-2 过滤器选择-3
有很多这样的选择,而且随着时间的推移,选择可能会变得更大。我想知道在将这些选项发送到url时,是否有任何方法可以压缩这些选项,这样我就不会得到一个非常长且无法读取的地址

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


我想要的是
example.com?filters=something\u相对较短\u和\u simple
如果可能的话,您可以创建代码,将搜索参数列表(作为JSON)保存在DB表(或者缓存)中,并返回一个令牌(基于用户ID,然后是
查询中新创建条目的ID
表)

然后,您可以通过调用
http://who.cares/?token=0acb087454d65ca63

该表将类似于:

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;
更新:
如果这些查询来自公共站点(而不是我假设的某些后端CMS/CRM),那么最好删除
account\u id
部分,而是从用户查询参数的JSON中生成
hash

因此此解决方案将保存所有可能的组合,但仅在请求时保存(而不是提前完成所有操作),对吗?这样做只会保存用户所做的任何组合。@mistermartin好吧,您也可以放弃
帐户
部分,而是从用户查询的JSON中进行哈希(如果它不是我最初假设的后端系统,那么效果会更好)。