爲何要進行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