下表中列出了一些URL特殊符號及編碼
| + | URL 中+號表示空格 | %2B |
| 空格 | URL中的空格可以用+號或者編碼 | %20 |
| / | 分隔目錄和子目錄 | %2F |
| ? | 分隔實際的URL和參數 | %3F |
| % | 指定特殊字符 | %25 |
| # | 表示書簽 | %23 |
| & | URL 中指定的參數間的分隔符 | %26 |
| = | URL 中指定參數的值 | %3D |
很容易理解字符/ ? % # & =是url的保留字符,/是地址分隔符,?后面接參數串,#表示書簽,&參數間分隔符,=指定參數值,
如果參數值,參數名或者地址里面里有上述字符需要轉義,形式是%+十六進制數字的形式,所以%也是保留字符。
空格其實可以不用作為保留字符的,但是各種原因吧,可能為了以后考慮,也要作為保留字符,參數里有空格的話需要轉義,轉移值是%20,
麻煩就在於application/x-www-form-urlencoded可以把空格轉移成+,那么如果參數值里確實含有+怎么辦?所以+也要作為保留字符。
如果空格和其他保留字符一樣都轉義成%XX的型式就沒多那么多歧義了。
URLEncoder.encode會把空格轉成+,有些人再做一次replaceAll(“\\+”, “%20″),將空格強制轉成%20。
/?#&= ----> %XX,
%----->%XX,
space---->+或者%20
+------>%XX
參考:
https://blog.csdn.net/oqqquzi1234567/article/details/43409737
https://blog.csdn.net/foxpeter/article/details/23475293
https://zh.wikipedia.org/wiki/%E7%99%BE%E5%88%86%E5%8F%B7%E7%BC%96%E7%A0%81
http://reason2003.iteye.com/blog/719682
