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 中的部分字符。
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 中的部分字符。