首页 > 代码库 > Javascript Query String Parsing

Javascript Query String Parsing

1. URL encoding

为什么要进行URL encoding?这是因为,有些字符是不能成为URL一部分的,举个例子,比如空格符。另外,有些有特殊含义的保留字符,比如#,作为HTML锚点,用于定位到HTML文档的某个位置上;=符号在URL里用于分割URL参数的key和value。

URL encoding依据以下规则:

  • 字母(A–Z 以及 a–z),数字(0-9)以及‘.‘,‘-‘,‘~‘和‘_‘这些字符不进行编码
  • 空格符要编码成+或者"%20"
  • 所有其他的字符,要被编码成%HH这样形式的十六进制表示;任何非ASCII字符,应该要取UTF-8的十六进制(或者是其他编码),以%HH表示;

NOTE: 更多详细信息,可以参考这篇WIKI——Query String。关于空格符以及其他的保留字符,可以去查阅标准文档RFC 1738。

2. Javascript Encode/Decode Functions

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