URL 编码的规定由 RFC-3986 给出。
要说跟 ASCII 有关系也有关系,要说没关系也没关系。
URL 编码规定只能包含英文字母(a-zA-Z)、数字(0-9)、和几个保留字符,这些字符的都包含在 ASCII 范围内;但不是所有 ASCII 字符都被 URL 编码允许,这个能理解不?
另外 URL 里每个“段”允许的保留字符是不一样的:
-
?/
在 Query 部分是不用被编码的;
-
:@-.\_~!$&’()*+,;=
这些字符在 Path 部分是不用被编码的;
-
/?:@-.\_~!$&’()*+,;=
在 Fragment 部分是不用被编码的。
以上这些保留字符只是说允许不编码,但不是说不能编码。比如 ?
在 Query 里如果是充当一个键值对的键或值的时候,还是得编码。
P.S. 最新的 RFC 规定里已经说 URL 在 HTTP 请求报文里需要是 UTF-8 编码的,所以看上去是 ASCII 里的部分字符,实际上是 UTF-8 中的部分字符。
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…