一、为何进行URL字符转义
如果你的表单使用get方法提交,并且提交的参数中有“&”等特殊符的话,如果不做处理,在service端就会将&后面的作为另外一个参数来看待。因此,需要对url字符进行转义。
例如表单的action为list.jsp?act=go&state=5 则提交时通过request.getParameter可以分别取得act和state的值。 如果你的本意是act='go&state=5’这个字符串,那么为了在服务端拿到act的准确值,你必须对&进行转义。
二、URL转义字符的原理——将特殊字符转换成ASCII码
格式:%字符的ASCII码,即一个百分号%,后面跟对应字符的ASCII(16进制)码值。
ASCII码表
例:空格的ASCII值(16进制)为20,则空格的编码值为%20。
三、有哪些字符需要转义?
特殊字符 | ASCII值(16进制) | URL编码值 |
---|---|---|
空格(0) | 20 | %20 |
+ | 2B | %2B |
/ 分隔目录和子目录 | 2F | %2F |
? 分隔实际的URL和参数 | 3F | %3F |
% 指定特殊的字符 | 25 | %25 |
+ | 2B | %2B |
# 书签 | 23 | %23 |
&指定参数的分隔符 | 26 | %26 |
= | 3D | %3D |
换行LF | 0A | %0A |
回车CR | 0D | %0D |
china
Content-Length: 0
HTTP/1.1 200 OK
Content-Type: text/html
Content-Length: 47
< html>Insert undesireable content here< /html>
则其转义字符串为:
china%0d%0aContent-Length:%200%0d%0a%0d%0aHTTP/1.1%20200%20OK%0d%0aContent-Type:%20text/html%0d%0aContent-Length:%2047%0d%0a%0d%0a
< html >Insert undersireable content here< /html >