除了以上字元,其他字元出現在URL之中都必須轉義,規則是根據作業系統的預設編碼,將每個位元組轉為百分號(%)加上兩個大寫的十六進位制字母。比如,UTF-8的作業系統上,http://www.example.com/q=春節…,漢字“春節”不是URL的合法字元,所以被瀏覽器自動轉成http://www.example.com/q=%E6%…。
其中,“春”轉成了%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。