为何要进行URL encoding?这是由于,有些字符是不能成为URL一部分的,举个例子,好比空格符。另外,有些有特殊含义的保留字符,好比#,做为HTML锚点,用于定位到HTML文档的某个位置上;=符号在URL里用于分割URL参数的key和value。 html
URL encoding依据如下规则: 函数
NOTE: 更多详细信息,能够参考这篇WIKI——Query String。关于空格符以及其余的保留字符,能够去查阅标准文档RFC 1738。 编码
Javascript内置了几对编码和解码的函数。起初只有escape和unescape这一对方法,但后来这对方法已经不推荐使用了,新的标准制定了两对新的编码和解码函数:encodeURI和decodeURI以及encodeURIComponent和decodeURIComponent。 spa
但实际上内置的编码解码函数,对于URL query string的编码和解码却不是十分正确的。 unix
代码 | 结果 | 说明 |
---|---|---|
"A + B" | "A+%2B+B" | 指望值 |
escape("A + B") | "A%20+%20B" | 错误 |
encodeURI("A + B") | "A%20+%20B" | 错误 |
encodeURIComponent("A + B") | "A%20%2B%20B" | 能够接受,可是有点奇怪 |
代码 | 结果 | 说明 |
---|---|---|
"A+%2B+B" | "A + B" | 指望值 |
unescape("A+%2B+B") | "A+++B" | 错误 |
decodeURI("A+%2B+B") | "A+%2B+B" | 错误 |
decodeURIComponent("A+%2B+B") | "A+++B" | 错误 |
NOTE:SEE ALSO:Javascript Madness: Query String Parsing code