URL为什么要编码
- 在传输过程中,URL中有些字符会引起歧义,比如以下两种情况
- URL查询字符的一般格式为
key=value&key=value
,那么如果value
字符串中包含了=,&
,那么就会造成解析错误 - 或者URL的编码格式采用的是ASCII码,而你又在其中输入了中文,也可能会造成解析错误
- 所以URL编码就是使用安全的字符去表示那些不安全的字符
JS中的3个编码函数详解
escape()
-
escape()
不能直接用于URL编码,它的真正作用是返回一个字符的Unicode编码值 - 不编码的符号有,ASCII字母、数字、标点符号"@ * _ + - . /"(
*/@+-._0-9a-zA-Z
) - 在
\u0000到\u00ff
之间的符号被转成%xx
的形式,其余符号被转成%uxxxx
的形式 - 对应的解码函数是
unescape()
encodeURI()
-
encodeURI()
是JS中用来对URL编码的函数,对常见符号进行编码 - 不编码的符号是,一些在网址中有特殊含义的符号
!#$&'()*+,/:;=?@-._~0-9a-zA-Z
- 编码后,它输出符号的
utf-8
形式,并且在每个字节前加上% - 对应的解码函数是
decodeURI()
encodeURIComponent()
-
encodeURIComponent()
:它用于对URL的组成部分进行个别编码,而不用于对整个URL进行编码 - 因此在encodeURI()中不被编码的符号,在encodeURIComponent()中统统会被编码
- 不编码的符号有,
!'()*-._~0-9a-zA-Z
- 对应的解码函数是
decodeURIComponent()
网友评论