摘要:如果使用進行了一遍編碼,傳過去后,發現解碼出現問題,需要使用兩次方法,例如中文第一次是把中文編碼成的格式,第二次是對中的進行編碼編碼成。
網頁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。
其中,“春”轉成了%E6%98%A5,“節”轉成了%E8%8A%82。這是因為“春”和”節“的UTF-8編碼分別是E6 98 A5和E8 8A 82,將每個字節前面加上百分號,就構成了URL編碼。
encodeURI 方法的參數是一個字符串,代表整個URL。它會將元字符和語義字符之外的字符,都進行轉義。encodeURIComponent只轉除了語義字符之外的字符,元字符也會被轉義。因此,它的參數通常是URL的路徑或參數值,而不是整個URL。
decodeURI用于還原轉義后的URL。它是encodeURI方法的逆運算。decodeURIComponent用于還原轉義后的URL片段。它是encodeURIComponent方法的逆運算。
在瀏覽器地址欄里,瀏覽器認為%是個轉義字符,瀏覽器會把%與%之間的編碼,兩位兩位取出后進行解碼,然后再傳遞給后端,然后由后端進行再次解碼。
如果使用encodeURI()進行了一遍編碼,傳過去后,發現解碼出現問題,需要使用兩次encodeURI方法,例如encodeURI(encodeURI("中文"));第一次是把中文編碼成%xy的格式,第二次是對%xy中的%進行編碼%編碼成%25。
字符 | 說明 | 轉化 |
---|---|---|
+ | URL 中+號表示空格 | %2B |
空格 | URL中的空格可以用+號或者編碼 | %20 |
/ | 分隔目錄和子目錄 | %2F |
? | 分隔實際的URL和參數 | %3F |
% | 指定特殊字符 | %25 |
v# | 表示書簽 | %23 |
& | URL 中指定的參數間的分隔符 | %26 |
= | URL 中指定參數的值 | %3D |
參考:阮一峰的 《JavaScript參考教程》
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/91963.html
摘要:文章首發地址深入分析中的中文編碼問題背景編碼問題一直困擾著程序開發人員,尤其是在中更加明顯,因為是跨平臺的語言,在不同平臺的編碼之間的切換較多。 文章首發地址:深入分析 Java Web 中的中文編碼問題 背景: 編碼問題一直困擾著程序開發人員,尤其是在 Java 中更加明顯,因為 Java 是跨平臺的語言,在不同平臺的編碼之間的切換較多。接下來將介紹 Java 編碼問題出現的根本原...
摘要:大部分需要編碼的原因是由于有特殊字符如等或者參數是中文形式。不會被此方法編碼的字符重點因此,對于中文字符串來說,如果不希望把字符串編碼格式轉化成格式的比如原頁面和目標頁面的是一致的時候,只需要使用。 一、為什么要 urlencode()? 因為當字符串數據以url的形式傳遞給web服務器時,字符串中是不允許出現空格和特殊字符的。 也就是說,url的參數傳遞的時候,需要遵循一定的url...
摘要:大部分需要編碼的原因是由于有特殊字符如等或者參數是中文形式。不會被此方法編碼的字符重點因此,對于中文字符串來說,如果不希望把字符串編碼格式轉化成格式的比如原頁面和目標頁面的是一致的時候,只需要使用。 一、為什么要 urlencode()? 因為當字符串數據以url的形式傳遞給web服務器時,字符串中是不允許出現空格和特殊字符的。 也就是說,url的參數傳遞的時候,需要遵循一定的url...
閱讀 3858·2023-04-26 00:36
閱讀 2667·2021-11-16 11:44
閱讀 1082·2021-11-15 17:58
閱讀 1665·2021-09-30 09:47
閱讀 1208·2019-08-30 13:05
閱讀 1539·2019-08-30 12:55
閱讀 2409·2019-08-30 11:02
閱讀 2717·2019-08-29 17:01