URL傳遞中文編碼的解決方案

網頁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%82spa

其中,「春」轉成了%E6%98%A5,「節」轉成了%E8%8A%82。這是由於「春」和」節「的UTF-8編碼分別是E6 98 A5E8 8A 82,將每一個字節前面加上百分號,就構成了URL編碼。操作系統

encodeURI 方法的參數是一個字符串,表明整個URL。它會將元字符和語義字符以外的字符,都進行轉義。encodeURIComponent只轉除了語義字符以外的字符,元字符也會被轉義。所以,它的參數一般是URL的路徑或參數值,而不是整個URLcode

decodeURI用於還原轉義後的URL。它是encodeURI方法的逆運算。decodeURIComponent用於還原轉義後的URL片斷。它是encodeURIComponent方法的逆運算。blog

在瀏覽器地址欄裏,瀏覽器認爲%是個轉義字符,瀏覽器會把%與%之間的編碼,兩位兩位取出後進行解碼,而後再傳遞給後端,而後由後端進行再次解碼。教程

image

若是使用encodeURI()進行了一遍編碼,傳過去後,發現解碼出現問題,須要使用兩次encodeURI方法,例如encodeURI(encodeURI("中文"));第一次是把中文編碼成%xy的格式,第二次是對%xy中的%進行編碼%編碼成%25ip

字符 說明 轉化
+ URL 中+號表示空格 %2B
空格 URL中的空格能夠用+號或者編碼 %20
/ 分隔目錄和子目錄 %2F
? 分隔實際的URL和參數 %3F
% 指定特殊字符 %25
v# 表示書籤 %23
& URL 中指定的參數間的分隔符 %26
= URL 中指定參數的值 %3D

參考:阮一峯的 《JavaScript參考教程》rem

相關文章
相關標籤/搜索