網頁URL的合法字符分紅兩類。後端
URL元字符:分號(;),逗號(’,’),斜槓(/),問號(?),冒號(:),at(@),&,等號(=),加號(+),美圓符號($),井號(#)瀏覽器
語義字符:a-z,A-Z,0-9,連詞號(-),下劃線(_),點(.),感嘆號(!),波浪線(~),星號(*),單引號(),圓括號(()`)編碼
除了以上字符,其餘字符出如今URL之中都必須轉義,規則是根據操做系統的默認編碼,將每一個字節轉爲百分號(%)加上兩個大寫的十六進制字母。好比,UTF-8的操做系統上,http://www.example.com/q=春節
這個URL之中,漢字「春節」不是URL的合法字符,因此被瀏覽器自動轉成http://www.example.com/q=%E6%98%A5%E8%8A%82
。spa
其中,「春」轉成了%E6%98%A5
,「節」轉成了%E8%8A%82
。這是由於「春」和」節「的UTF-8編碼分別是E6 98 A5
和E8 8A 82
,將每一個字節前面加上百分號,就構成了URL編碼。操作系統
encodeURI
方法的參數是一個字符串,表明整個URL
。它會將元字符和語義字符以外的字符,都進行轉義。encodeURIComponent
只轉除了語義字符以外的字符,元字符也會被轉義。所以,它的參數一般是URL
的路徑或參數值,而不是整個URL
。code
decodeURI
用於還原轉義後的URL。它是encodeURI
方法的逆運算。decodeURIComponent
用於還原轉義後的URL
片斷。它是encodeURIComponent
方法的逆運算。blog
在瀏覽器地址欄裏,瀏覽器認爲%
是個轉義字符,瀏覽器會把%與%
之間的編碼,兩位兩位取出後進行解碼,而後再傳遞給後端,而後由後端進行再次解碼。教程
若是使用encodeURI()
進行了一遍編碼,傳過去後,發現解碼出現問題,須要使用兩次encodeURI方法,例如encodeURI(encodeURI("中文"));
第一次是把中文編碼成%xy
的格式,第二次是對%xy
中的%
進行編碼%
編碼成%25
。ip
字符 | 說明 | 轉化 |
---|---|---|
+ | URL 中+號表示空格 | %2B |
空格 | URL中的空格能夠用+號或者編碼 | %20 |
/ | 分隔目錄和子目錄 | %2F |
? | 分隔實際的URL和參數 | %3F |
% | 指定特殊字符 | %25 |
v# | 表示書籤 | %23 |
& | URL 中指定的參數間的分隔符 | %26 |
= | URL 中指定參數的值 | %3D |
參考:阮一峯的 《JavaScript參考教程》rem