为什么post的URL中/会变成%2F

POST /index.php?Topic/login= HTTP/1.1

POST /index.php?Topic%2Flogin= HTTP/1.1

有些符号在URL中是不能直接传递的,如果要在URL中传递这些特殊符号,那么就要使用他们的编码了。
编码的格式为:%加字符的ASCII码,即一个百分号%,后面跟对应字符的ASCII(16进制)码值。例如 空格的编码值是"%20"。
如果不使用转义字符,这些编码就会当URL中定义的特殊字符处理。
下表中列出了一些URL特殊符号及编码 十六进制值
1.+ URL 中+号表示空格 %2B
2.空格 URL中的空格可以用+号或者编码 %20
3./ 分隔目录和子目录 %2F
4.? 分隔实际的 URL 和参数 %3F
5.% 指定特殊字符 %25
6.# 表示书签 %23
7.& URL 中指定的参数间的分隔符 %26
8.= URL 中指定参数的值 %3D

传参的时候,用&符号连接,如果其中的一个参数中含有 # $ ^ & * + - 这些符号的时候,在另一个页面getParameter就会取不到穿过来的参数

这不是很正常么?url中/代表路径分割符号,如果不转换成%2F,那么会被理解为分割而不是topic/login中的那个杠。
之所以是2F,是因为/的ascii是十六进制的2F

GET请求对于特殊字符和参数是不会进行 转义 的,POST请求会对参数进行 转义 这是一种 保护和放XSS跨站攻击的方法,但也不能真正的安全。

URL转码,转成十六进制的字符串

这么说吧,正常的url是类似这样的 www.baidu.com?com=com 如果说我要是传的参数中中有一个?,问号后面代表的是对应的需要传的参数,如果我要是
传一个参数,里面也会有? 类似这样 www.baidu.com?com=?com 这样的话,url就会解析不出来,所以避免这样的情况发生,会把参数转成16进制字符串

编码的格式为:%加字符的ASCII码,即一个百分号%
十六进制值
/ 分隔目录和子目录 %2F