首先:协议规范,RFC 1738,定义url地址中不能包含除:0-9,a-zA-Z,- 之外的字符,即,如URL中包含特殊字符,如$-_.+!*’(), 都要编码。
关于为什么如此定义,有如下几个原因:
1、本身html代码中,很多特殊字符,其本身的特殊含义,比如’#',就适用于定位html( anchor),所以这类本身有特殊含义的字符,不能直接用于发送,需要编码。
2、如果其中本身就包含一些,非打印的控制字符,那么无法正常打印显示,所以必须被编码才能传输。ASCII字符集中的功能/控制字符。
3、还有些保留字符(&,=,:),不安全字符(<,>,#),所以需要对url地址编码。
4、还有一些容易想到的,比如空格,如果出现在url地址中,就很难判断空格前后的内容是否是属于url的,所以对于空格这样的特殊字符,肯定是需要编码的。