URL中的特殊字符

问题场景:
经过Base64转码后的字符串常常包含“+”号,拼接为URL(如param1=test+1)后,服务端获取到的值是错误的(通过reuqest.‍getParameter("param1")‍得到test 1)。

错误原因:
“+”在URL中是特殊字符,特殊字符在URL中不能直接传递,使用的话需要使用它们的编码。
编码的规则是前面一个百分号%,后面是对应字符的ASCII(16进制)码值。例如空格的编码值是"%20"。以下为url的特殊字符和它们的特殊含义以及对应编码。
1) + URL 中+号表示空格 %2B
2) 空格 URL中的空格可以用+号或者编码 %20
3) / 分隔目录和子目录 %2F
4) ? 分隔实际的 URL 和参数 %3F
5) % 指定特殊字符 %25
6) # 表示书签 %23
7) & URL 中指定的参数间的分隔符 %26
8) = URL 中指定参数的值 %3D

解决办法:
a.
修改客户端,将客户端带“+”的参数中的“+”全部替换为?“2B%”,这样参数传到服务器端时就能得到“+”了。
b.修改服务器端,将空格替换为“+”,这种方式只适用于参数中有?“+”没有空格的情况。

备注:
js中使用encodeURIComponent和decodeURIComponent进行特殊字符的编码和解码。
java中使用 URLEncoder.encode和URLDecoder.decode进行特殊字符的编码和解码。

你可能感兴趣的:(URL中的特殊字符)