RFC3986 协议对 URL 的编解码问题做出了详细的建议,指出了哪些字符需要被编码才不会引起 URL 语义的转变, 以及对为什么这些字符需要编码做出了相应的解释。
RFC3986 协议规定 URL 只允许包含以下四种字符: 1、英文字母(a-zA-Z) 2、数字(0-9) 3、-_.~ 4个特殊字符 4、所有保留字符,RFC3986 中指定了以下字符为保留字符(英文字符): ! * ' ( ) ; : @ & = + $ , / ? # [ ]
对Url进行编码后可以将一些特殊字符和汉字变为Encode编码格式,encodeURIComponent编码的范围更广,会将http://XXX中的//也编码,会导致URL不可用。
一般来说,我们使用encodeURIComponent()方法的时候要比使用encodeURI()更多,因为在实践中更常见的是对查询字符串参数而不是对基础URL进行编码。