为什么要进行URL encoding?这是因为,有些字符是不能成为URL一部分的,举个例子,比如空格符。另外,有些有特殊含义的保留字符,比如#,作为HTML锚点,用于定位到HTML文档的某个位置上;=符号在URL里用于分割URL参数的key和value。
URL encoding依据以下规则:
NOTE: 更多详细信息,可以参考这篇WIKI——Query String。关于空格符以及其他的保留字符,可以去查阅标准文档RFC 1738。
Javascript内置了几对编码和解码的函数。起初只有escape和unescape这一对方法,但后来这对方法已经不推荐使用了,新的标准制定了两对新的编码和解码函数:encodeURI和decodeURI以及encodeURIComponent和decodeURIComponent。
但实际上内置的编码解码函数,对于URL query string的编码和解码却不是十分正确的。
代码 | 结果 | 说明 |
---|---|---|
"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
Javascript Query String Parsing,布布扣,bubuko.com
Javascript Query String Parsing
原文地址:http://my.oschina.net/knightuniverse/blog/290706