项目中有一个接口是用GET方法接收参数的,测试的时候发现当URL的参数中出现 + 号的时候,传到后端 + 号全都变成了空格了。
然后从网上找到了原因:URL参数中是不能出现+ % # & = ? /
等特殊字符的,因为这些字符在URL中有默认的含义,比如&
在URL中表示参数间的分隔符,如果不将&
转义而直接放在GET请求的参数里,后端的Tomcat就会以这个&
为分隔符将参数拆分掉。
如果要传递这些特殊字符给后端,需要将它们转义。转码的格式为:%加字符的ASCII码,即一个百分号%,后面跟对应字符的ASCII(16进制)码值。例如 +号的编码值是"%2B"。
下表中列出了一些URL特殊符号及编码:
特殊字符 | 在URL中的默认含义 | 转义码 |
---|---|---|
+ | URL 中+号表示空格 | %2B |
空格 | %20 | |
/ | 分隔目录和子目录 | %2F |
? | 分隔实际的 URL 和参数 | %3F |
% | 指定特殊字符 | %25 |
# | 表示书签 | %23 |
& | URL 中指定的参数间的分隔符 | %26 |
= | URL 中指定参数的值 | %3D |
浏览器中默认提供的方法encodeURIConponent()
也可以帮我们提供转义