URI编码有%20等这样的字符,以%来转义不适合在URI中传输的字符.
在JS中有两对编解码函数, encodeURI/decodeURI和encodeURIComponent/decodeURIComponent, 有什么区别? 参考这篇文章
举例:

//保留字符
encodeURI('?')
"?"
encodeURIComponent('?')
"%3F"
decodeURI('%3F')
"%3F"
decodeURIComponent('%3F')
"?"
//非打印字符
encodeURI(' ')
"%20"
encodeURIComponent(' ')
"%20"
decodeURI('%20')
" "
decodeURIComponent('%20')
" "
//mark字符
encodeURI('_')
"_"
encodeURIComponent('_')
"_"

"?"属于URI中特殊的字符,而空格不是,这两对编解码函数的区别就是这一类特殊字符(保留字符)要不要被编解码.
Mark字符与基本字符一样,不需要被编解码.

保留字符(reserved characters):这类字符是URI中的保留关键字符,它们用于分割URI中的各个部分。这些字符是:";" | "/" | "?" | ":" | "@" | "&" | "=" | "+" | "$" | ","
Mark字符(mark characters):这类字符在RFC-2396中特别定义,但是没有特别说明用途,可能是和别的RFC标准相关。 这些字符是:"-" | "_" | "." | "!" | "~" | "*" | "'" | "(" | ")"
基本字符(alphanum characters):这类字符是URI中的主体部分,它包括所有的大写字母、小写字母和数字
其他非打印字符都需要被编解码

标签: none 阅读量: 1134

评论已关闭