Javascript 使用%20而不是+;使用GET方法提交表单时对空格进行编码
我有一个包含表单的静态HTML页面。表单将使用GET方法提交。(URL字符串将由我们的服务自动解析。) 默认情况下,如果在输入字段中输入Javascript 使用%20而不是+;使用GET方法提交表单时对空格进行编码,javascript,html,forms,Javascript,Html,Forms,我有一个包含表单的静态HTML页面。表单将使用GET方法提交。(URL字符串将由我们的服务自动解析。) 默认情况下,如果在输入字段中输入hello world,结果URL将类似于xxx=hello+world 但要求是,空格应编码为%20,而不是+。(比如xxx=hello%20world) 我能想到的唯一解决方案是监听submit事件,使用encodeURIComponent自己对所有输入进行编码,并使用location.href重定向到结果URL 我觉得这样有点。。肮脏的。还有更优雅的解决方
hello world
,结果URL将类似于xxx=hello+world
但要求是,空格应编码为%20
,而不是+
。(比如xxx=hello%20world
)
我能想到的唯一解决方案是监听submit事件,使用encodeURIComponent
自己对所有输入进行编码,并使用location.href
重定向到结果URL
我觉得这样有点。。肮脏的。还有更优雅的解决方案吗?
+
是空间编码的标准方法。后端应该正确处理它们
我能想到的唯一解决方案是监听onSubmit
事件,使用encodeURIComponent
自己对所有输入进行编码,并使用location.href
重定向到结果URL
如果您无法更新后端以正确处理它们,那么遗憾的是,您唯一的选择就是这样做。当然,任何禁用JavaScript的客户端都会以通常的方式发送表单;为了防止出现这种情况,您可能希望表单在默认情况下不可用,并且仅通过页面上的JavaScript可用
说明如何序列化表单控件;一些注意事项(但请仔细检查规格):
- 您还需要对字段名使用
,而不仅仅是值encodeURIComponent
字段不包括在内已禁用
- 不包括没有
名称的字段
- 字段包含在文档顺序中(您将在表单上的
中看到它们的顺序)querySelectorAll
- 如果未选中复选框,则完全忽略复选框;如果选中,则包括其名称及其
值的编码版本(或
”,如果没有)“on
- 具有相同名称的重复字段仅包含为重复字段,例如
&field=value1&field=value2
和type=button
按钮不包括在内type=reset
按钮仅在用于提交表单时才包括在内。您需要注意按钮上的type=submit
,以便知道应该包括按钮的值,因为表单可以通过其他方式提交onclick
+
。但是是的。。另一个解决方案是要求他们将所有+
替换到spacesIf,因为这感觉很脏,但我无法想象其他方法可以继续,除非您希望(或被允许)开发一些服务器端代码作为代理。要从节省时间的功能中获益,您必须遵守您不能遵守的规则,您需要依靠自己:)