我有几个搜索形式,1-50的领域和其他与~100个。通常,作为HTML规格说,我搜查使用的方法获得,因为没有数据被改变。我还没碰到这个问题,但我想知道如果我会跑出来的URL空间吗?

极限的 Internet Explorer 是2083符。其他浏览器,有一个 高得多的限制.我是running Apache,因此限制有大约4000人物,这IIS16384符。

在100领域,说平均域名的长度为10字符,这已经是5000人物...令人惊讶的100场的形式,我没有任何错误。(25%的领域是多个选择,因此领域的长度长得多。)

所以,我想知道什么我的选择。(缩短的形式不是一个选项。) 在这里我的想法:

  • 使用岗位。我不喜欢这个作为多,因为目前的用户可以收藏他们的搜索和执行他们稍后再--一个真正的荡不错的功能。
  • 有JavaScript循环的形式来确定哪些领域是不同于默认,填充的另一种形式,并提交这一个。用户当然会签缩短的版本。

任何其他想法吗?

此外,任何人都不会知道如果长度编码长度,或只是简单的文字?

我在发展中PHP,但是它可能没有差别。

编辑: 我无法去除任何领域;我无法缩短的形式。这是什么样的客户已要求他们经常使用一系列领域,在不同的类别。我知道那很难想到的一种形式,看起来不错,这个很多领域,但用户没有问题了解它是如何工作的。

有帮助吗?

解决方案

你的用户实际上将会使用所有50至100领域做自己的搜索?如果他们只使用一些,为什么不发布搜索到一个"中间"页面,该页面header()-重定它们的结果页面上只有用户改变的领域中的网址?结果页会后,使用默认值的领域不存在的网址。

其他提示

以间接地解决您的问题,如果我面对的是一个100-字形式填写在一个页面上,我们最有可能接近我的浏览器,这听起来像一个完整的可用性 噩梦.

我的回答是,如果有一个危险,我收到附近的任何地方,限制 正常的 使用的形式可能我做错了。

按优先顺序的,我会的

  1. 分形式和使用某些服务器的端状态的保留
  2. 开关向后,然后产生和重新定向的一个较短的网址上发布的决心同样的结果
  3. 放弃;)

你说是在一个评论,即许多领域"是隐藏的,可以打开"。

如果你愿意放弃优雅的退化,你总是可以实际上增加和删除的字段的的形式,而不是仅仅隐藏和展示他们:浏览器将不提交那些不包括在的形式。

这是一个变体",使和模型"的形式,在线保险等。网页的使用--选择的作出,提交回服务器,并获得该名单的模型,制造商。

如果你不介意使用javascript然后你可以拥有它的工作数长度的查询串如果太长,然后转换到一个职位。然后有某种形式的url映射器,以允许他们这些书签发搜索。

使用后,如果用户签发的搜索,将其保存在一个数据库,并给它一个独特的标记,然后向搜索页面使用 GET 与通过标记作为参数。

缩写是一个很好的例子:你给它一个非常长的网址,它可以节省这个数据库,为您提供了一个独特的标识,用于该网址,以后你可以请求长URL使用的标识符。

在PHP这将是沿线的东西:

<?php
if (isset($_GET['token']))
{
    $token = addslashes($_GET['token']);
    $qry = mysql_query("SELECT fields FROM searches WHERE token = '{$token}'");
    if ($row = mysql_fetch_assoc($qry))
    {
        performSearch(unserialize($row['fields']));
        exit;
    }
    showError('Your saved search has been removed because it hasn\'t been used in a while');
    exit;
}
$fields = addslashes(serialize($_POST));
$token = sha1($_SERVER['REMOTE_ADDR'].rand());
mysql_query("INSERT INTO searches (token, fields, save_time) Values ('{$token}', '{$fields}', NOW())");
header('Location: ?token='.$token);
exit;
?>

并运行一个脚本报:

<?php
mysql_query('DELETE FROM searches WHERE save_time < DATE_ADD(NOW(), INTERVAL -200 DAY)');
?>

此外,任何人都不会知道的长度 是的编码长度,或只是简单的文字?

我的猜测是用于编码长度。我做了一个简单的试验:a textarea和提交按钮到一个简单的PHP script.
载入页面IE6,粘贴的一些法文本在该文本区域,2000年的人物。如果我打了提交按钮,什么都没有。我不得不减少长度的案文能够提交。

换句话说,2083字符的限制是完全的最大长度的网址现在的地址栏提交后获得的请求。

我会去JavaScript解决方案:在提交,分析的形式,创建一个辅助形式 hidden 属性,并提交。

一些战略,缩短了产出:

  • 正如你指出,你已经可以跳过所有价值留给默认(没有领域,没有值)。
  • 如果你有一个形式喜欢的一个 处理论坛的搜索 你可以组的所有框国在一个变量只,例如。使用的字母编码。
  • 使用短 value 属性(在 select 例如)。

注:如果搜索页面实际上是由几个独立的形式,其用户填写的只有一部分或另一种,你可以做几个单独的形式。
可能不适用于你的情况和可能似乎是显而易见的,但值得一提供记录...^_^

一个可以从哲学的角度看,在搜查提交后建立一个保存检索(尤其是当一个搜索作为复杂的一个目作为一个用户使).在这种情况下,可以接受后,为建立一个搜索,然后向使用一个获取适当的搜索结果(后/重新定向/得到)。

这也将允许用户签发的搜索结果(获取),以回来的任何时间重新运行搜索。

获得可以有一个优势,如果你的搜索结果可以共用,在情况的请求后,如果你链接发送给别人,那个人不会看到任何搜索结果

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top