【问题标题】:How is the get URL generated in HTML forms?HTML 表单中的 get URL 是如何生成的?
【发布时间】:2013-04-06 13:26:02
【问题描述】:

我一直在阅读有关get 提交表单数据的方法。

因此,表单中的数据将附加到表单的action 属性值中,? 作为分隔符。

我不明白的是,我如何才能正确预测表单提交中的 URL。

我的意思是,假设一个表单看起来像这样:

<form method="get" action="foobar.com/search">
  User Name : <input type="text" name="uname"></input><br/>
  Name : <input type="text" name="name"></input><br/>
  <input type="submit" value="Submit"></input>
</form>

点击提交按钮时,生成的 URL 是什么? 应该是:foobar.com/search?[data encoded here]

但是什么协议定义了它的编码方式?该名称可能出现在用户名之前或之后。

是否可以编写一个脚本来为任何表单创建一个模板 URL,以便在用字符串数据替换相应的 %s 时,它会创建正确的 URL?

谢谢。

【问题讨论】:

标签: html forms get


【解决方案1】:

给定application/x-www-form-urlencoded 编码(默认)和 GET 的使用,简而言之,该过程是:

对于每个控件,按照它们在表单中出现的顺序,如果是成功的控件:

  1. 如果不是第一项,添加&amp;
  2. 对字段名称进行 URL 编码
  3. 添加=
  4. URL 编码字段的值

构建表单数据提交的完整流程是described in the HTML 5 specification(具体在The application/x-www-form-urlencoded encoding algorithm)。

是否可以编写一个脚本来为任何表单创建一个模板 URL,以便在用字符串数据替换相应的 %s 时,它会创建正确的 URL?

由于在提交表单之前并不总是可以预测哪些控件会成功,所以不能。

【讨论】:

  • 成功究竟意味着什么?如果控件不是文本字段怎么办?
  • Successful 是(或多或少)未被禁用,如果它是提交按钮则单击,检查它是单选还是复选框。不是文本字段的控件仍然有值。
  • 啊,谢谢昆汀!对于规范也是如此。
【解决方案2】:

参数的顺序完全没有区别,因为它是一个关联数组。

也就是说,我相当确定所有浏览器都会按照它们在源代码中出现的顺序发送变量。所以在你的情况下,它将是?uname=[input]&amp;name=[input]

【讨论】:

  • 它不是关联数组。它是一个字符串。解析器可以从中生成一个关联数组。给定两个具有相同名称的值,因为某些解析器的顺序非常重要,所以会根据数据出现的顺序丢弃数据。
猜你喜欢
  • 2021-08-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多