【问题标题】:Do browsers preserve order of inputs with same name on GET/POST?浏览器是否在 GET/POST 上保留同名输入的顺序?
【发布时间】:2011-04-30 23:15:46
【问题描述】:

我有这个带有多个同名inputs 的 HTML 代码:

<input type="hidden" value="42" name="authors" />
<input type="hidden" value="13" name="authors" />
<input type="hidden" value="33" name="authors" />

值的顺序很重要。 HTML 规范是否定义用户代理必须保留此顺序,如果是,常见(市场份额 > 1%)浏览器是否遵循此定义?

如果有人知道 WSGI 尤其是 Django 是否保留了服务器端的订单,则可以加分 :-)

谢谢!

【问题讨论】:

    标签: html cross-browser wsgi


    【解决方案1】:

    是的,它们应该按照html rfc中出现的顺序发送

    参见 8.2.1。 form-urlencoded 媒体类型:

    这些字段按照它们在文档中出现的顺序列出 名称与值以= 分隔 和从每个分开的对 其他&amp;。具有空值的字段 可以省略。特别是, 未选中的单选按钮和 复选框不应出现在 编码数据,但隐藏字段 VALUE 属性应该存在。

    我也在 html 4.0 的规范中找到:

    对于 url 编码的数据:

    控件名称/值列在 它们在文档中出现的顺序。 名称与值分开 由= 和名称/值对是 以&amp;分隔。

    对于多部分数据(感谢@Chuck):

    “多部分/表单数据”消息 包含一系列部分,每个部分 代表一个成功的控制。这 零件被送到加工代理处 同样的顺序对应的 控件出现在文档中 溪流。零件边界不应 出现在任何数据中;这是怎么回事 已完成不在此范围内 规范。

    【讨论】:

    • 对于多部分类型的表单也提供相同的订购保证。
    • 我仍在尝试查找有关 html 4.0 的信息,该 rfc 是针对 html 2.0 的。但我不认为他们破坏了兼容性,但是..仍在搜索
    • 我找到了。更新答案
    【解决方案2】:

    application/x-www-form-urlencodedtext/plainHTML5 spec 列出了一种算法,“对于表单数据集中的每个条目 [...] 追加”,从而产生相同的顺序。

    至于multipart/form-data“部件的顺序必须与表单数据集中的字段顺序相同。多个同名条目必须被视为不同的字段。”

    如果没有从文档中获取表单数据集的顺序,这将是不完整的:相同的规范为constructing the form data set定义了一个算法,“循环:对于控件中的每个元素字段,按树顺序,运行以下子步骤并且只跳过或追加一个条目

    因此,对于 HTML5 兼容的用户代理,无论采用何种编码,未跳过的参数都是树形排序的,允许重复

    【讨论】:

      猜你喜欢
      • 2018-09-10
      • 2010-10-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-22
      • 2016-08-10
      相关资源
      最近更新 更多