Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/402.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用%20而不是+;使用GET方法提交表单时对空格进行编码_Javascript_Html_Forms - Fatal编程技术网

Javascript 使用%20而不是+;使用GET方法提交表单时对空格进行编码

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 我觉得这样有点。。肮脏的。还有更优雅的解决方

我有一个包含表单的静态HTML页面。表单将使用GET方法提交。(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
    ,以便知道应该包括按钮的值,因为表单可以通过其他方式提交

“但要求是,空格应编码为%20而不是+。(如xxx=hello%20world)“要求是不能发送标准URI编码的表单?听起来后端需要修复,而不是表单。我们有一些硬件可以捕获和解析所有网络流量。URL字符串应该能够被解码当前无法解码的
+
。但是是的。。另一个解决方案是要求他们将所有
+
替换到spacesIf,因为这感觉很脏,但我无法想象其他方法可以继续,除非您希望(或被允许)开发一些服务器端代码作为代理。要从节省时间的功能中获益,您必须遵守您不能遵守的规则,您需要依靠自己:)