使用GET方法提交表单时,使用%20而不是+来编码空格

时间:2017-03-15 09:41:54

标签: javascript html forms

我有一个包含表单的静态HTML页面。表格将使用GET方法提交。 (URL字符串将由我们的服务自动解析。)

默认情况下,如果您在输入字段中输入hello world,结果网址将类似于xxx=hello+world

但要求是,空格应编码为%20而不是+。 (如xxx=hello%20world

我能想象的唯一解决方案是监听onSubmit事件,使用encodeURIComponent自行编码所有输入,并使用location.href重定向到结果URL。

我觉得这样有点......脏。还有更优雅的解决方案吗?

1 个答案:

答案 0 :(得分:3)

+application/x-www-form-urlencoded中对空格进行编码的标准方法。后端应该正确处理它们。

  

我能想象的唯一解决方案是收听onSubmit事件,使用encodeURIComponent自行编码所有输入,并使用location.href重定向到结果网址。

如果你不能让后端更新以正确处理它们,可悲的是,你唯一的选择就是这样。当然,任何禁用JavaScript的客户都会以通常的方式发送表单;为防止这种情况发生,您可能希望默认情况下表单不可用,并且只能通过页面上的JavaScript提供。

This section of the specification解决了如何序列化表单控件的问题;一些注释(但仔细检查规格):

  • 您还需要在字段名称上使用encodeURIComponent,而不仅仅是值。
  • disabled字段不包含在内。
  • 不包含name s的字段。
  • 字段包含在文档订单中(您将在表单上的querySelectorAll中看到它们的顺序)。
  • 如果未选中,则完全省略复选框;如果已选中,则会包含其value(或"on"如果没有)的名称和编码版本。
  • 具有相同名称的重复字段仅作为重复包括在内,例如&field=value1&field=value2
  • type=buttontype=reset按钮不包含在内。
  • 仅当使用该按钮提交表单时,才会包含
  • type=submit按钮。您需要注意按钮上的onclick才能知道您应该包含按钮的值,因为表单可以通过其他方式提交。