URL中的特殊字符
1个回答
展开全部
问题场景:
经过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进行特殊字符的编码和解码。
经过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进行特殊字符的编码和解码。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询