介绍:
项目中,url遇到了无法解析参数和数组对象的问题。 通过转码解决了,但实际原理不太清楚。 我研究了JS转码和解码。 该语言使用三个函数进行编码。 ()()e…
项目中,url遇到了无法解析参数和数组对象的问题。 通过转码解决了,但实际原理不太清楚。 我研究了JS转码和解码。
该语言使用三个函数进行编码。
()
()
三种编码方式的区别:
和:
:不能直接用于URL编码。 它的真正作用是返回一个字符的编码值,这样就可以对指定的字符串进行编码。
除 ASCII 字母、数字和标点符号“@ * _ + - ./”外,所有空格、标点符号、特殊字符和其他非 ASCII 字符都会被转换为 %xx(十六进制数字)格式的字符编码)。 即有 69 个未编码字符:*、+、-、.、/、@、_、0-9、az、AZ。
对应的解码函数为();
和:
**()** 是实际用于对 URL 进行编码的函数。 整个 URL 均已编码。 除常见符号外,URL“;/?:@&=+$,#”中具有特殊含义的符号不进行编码。 编码后,输出该符号的UTF-8形式,并在每个字节前添加%。 请注意,() 不编码单引号。
对应的解码函数是()。
和
用于对 URL 的各个组成部分进行单独编码,而不是对整个 URL 进行编码。 因此,()中没有编码的符号“; / ? : @ & = + $,#”都会被()编码。
因为()会编码更多的字符,比如“/”等字符。 如果字符串包含 URI 的多个部分,则不能用于编码。 否则,“/”字符编码后URL将显示不正确。 因此,在传递参数时,包含特殊字符的参数可能会造成中断。
总之:
**()**函数是js用来对字符串进行编码的。不常用
**()** 用于跳转整个url
**()** 用于传递参数。 包含特殊字符的参数可能会导致中断。