Javascript Query String Parsing

1. URL encoding

爲何要進行URL encoding?這是由於,有些字符是不能成爲URL一部分的,舉個例子,好比空格符。另外,有些有特殊含義的保留字符,好比#,做爲HTML錨點,用於定位到HTML文檔的某個位置上;=符號在URL裏用於分割URL參數的key和value。 html

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。 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

相關文章
相關標籤/搜索