除了以上字符,其他字符出现在 URL 之中都必须转义,规则是根据操作系统的默认编码,将每个字节转为百分号(%)加上两个大写的十六进制字母。比如,UTF- 8 的操作系统上,http://www.example.com/q= 春节 …,汉字“春节”不是 URL 的合法字符,所以被浏览器自动转成 http://www.example.com/q=%E6%…。
其中,“春”转成了 %E6%98%A5,“节”转成了 %E8%8A%82。这是因为“春”和”节“的 UTF- 8 编码分别是 E6 98 A5 和 E8 8A 82,将每个字节前面加上百分号,就构成了 URL 编码。
encodeURI 方法的参数是一个字符串,代表整个 URL。它会将元字符和语义字符之外的字符,都进行转义。encodeURIComponent 只转除了语义字符之外的字符,元字符也会被转义。因此,它的参数通常是 URL 的路径或参数值,而不是整个 URL。
decodeURI 用于还原转义后的 URL。它是 encodeURI 方法的逆运算。decodeURIComponent 用于还原转义后的 URL 片段。它是 encodeURIComponent 方法的逆运算。
在浏览器地址栏里,浏览器认为 % 是个转义字符,浏览器会把 % 与 % 之间的编码,两位两位取出后进行解码, 然后再传递给后端,然后由后端进行再次解码。
如果使用 encodeURI() 进行了一遍编码,传过去后,发现解码出现问题,需要使用两次 encodeURI 方法,例如 encodeURI(encodeURI(“ 中文 ”)); 第一次是把中文编码成 %xy 的格式,第二次是对 %xy 中的 % 进行编码 % 编码成 %25。
引用地址