關於js中的 escape() 、 encodeURI() 、 encodeURIComponent()函式詳解
阿新 • • 發佈:2018-12-19
首先看一下這三個函式在js版本中出現的時間
- escape() javascript 1.0
- encodeURI() javascript 1.5
- encodeURIComponent() javascript 1.5
escape() : 採用ISO Latin字符集對指定的字串進行編碼。所有的空格符、標點符號、特殊字元以及其他非ASCII字元都會轉化成%xx格式的字元編碼(xx代表此字元在字符集表裡編碼的16進位制數字)。比如,空格符的對應編碼是%20。不會對ASCII字元和數字進行編碼。不會被此方法編碼的字元:@ * / +,反向編碼函式:unescape()
。
encodeURI(): 把URI字串採用UTF-8編碼格式轉化成escape格式的字串。不會被此方法編碼的字元:! @ # $ & ( ) = : / ; ? + ',反向編碼函式:decodeURI()。
encodeURIComponent():把URI字串採用URF-8編碼格式轉化成escape格式的字串。與encodeURI相比,這個函式會將更多的字元進行編碼,比如"/"等字元。所以如果字串裡面包含了URI的幾個部分的話,不能用這個來進行編碼。否則“/”字元被編碼後將URL顯示錯誤。不會被此方法編碼的字元:! * ( ),反向編碼函式:decodeURIComp
onent()。
- 然後介紹一下三個函式的使用場景:
- escape()函式用於js對字串進行編碼。不常用
- encodeURI()用於整個url跳轉
- encodeURIComponent()用於引數的傳遞,引數包含特殊字元可能會造成間斷
然後我今天遇到一個需求,上游頁面通過url來到我的頁面後會傳遞一個加密後的引數。我需要取出來,然後傳遞給我們的服務端。但是取出來之後裡邊的一些字元就自動轉換了,比如裡邊多了一些等於號=,加號+。然後這時候我需要把取到的query再經過encodeURIComponent()函式處理一下,才能得到最開始的url中的引數的格式。然後再寫別的邏輯就沒問題了。