我有一个包含表单的静态HTML页面。表格将使用GET方法提交。 (URL字符串将由我们的服务自动解析。)
默认情况下,如果您在输入字段中输入hello world
,结果网址将类似于xxx=hello+world
但要求是,空格应编码为%20
而不是+
。 (如xxx=hello%20world
)
我能想象的唯一解决方案是监听onSubmit事件,使用encodeURIComponent
自行编码所有输入,并使用location.href
重定向到结果URL。
我觉得这样有点......脏。还有更优雅的解决方案吗?
答案 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=button
和type=reset
按钮不包含在内。type=submit
按钮。您需要注意按钮上的onclick
才能知道您应该包含按钮的值,因为表单可以通过其他方式提交。