为什么要经过url编码,首先先要知道url编码是怎样的
url编码是一种浏览器用get的方法打包表单输入的格式,也就是说:
他们会获取<form>里面的<input>的name和value,然后把他们编码,作为url的一部分,发送给服务器
name和value用=分开,每对name用&隔开,所以服务端的表单输入格式的url是这样的:http://127.0.0.1/1.php?name=123&age=20,但是在传输的时候,并不是完完整整的这样传英文,是把整个url用ASCII的十六进制编码,再发送到服务端,遇到ASCII以外的怎么办?URL 编码使用 "%" 其后跟随两位的十六进制数来替换非 ASCII 字符。举例来说,如果是胡字,那就把它用gb2312编码过后,取它的十六进制,前面再加上%,这就是它的url编码结果
同样,遇到特殊字符也是如此,什么才属于特殊字符,这就是为什么要url编码了,由上面知道,url的格式是这样的name1=value1&name2=value2,用“&”分割出每一个参数,然后再用“=”来分割出参数值,这一串字符是经过ascii编码的,编码后是这样的:
6E616D6531 3D 76616C756531 26 6E616D6532 3D 76616C756532。
6E616D6531:name1
3D:=
76616C756531:value1
26:&
6E616D6532:name2
3D:=
76616C756532:value2
服务端那边,是一个一个字节遍历该字节流的,遇到26,也就是&,它就会结合前面的3D,就知道是一对参数了,但是如果value里面的值含有&怎么办,那就变成了name=va&lue,那么name的值就是va了,所以为了区分这种,也通常会在特殊字符的每个字节前加上%,和中文一样