URL中的特殊字符
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了URL中的特殊字符相关的知识,希望对你有一定的参考价值。
参考技术A 问题场景:经过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中的特殊字符的主要内容,如果未能解决你的问题,请参考以下文章
url 中的特殊字符 % # & = ? / + 无法被后端解析问题分析及解决方法