1. 程式人生 > >關於js中的 escape() 、 encodeURI() 、 encodeURIComponent()函式詳解

關於js中的 escape() 、 encodeURI() 、 encodeURIComponent()函式詳解

首先看一下這三個函式在js版本中出現的時間

  1.  escape()                           javascript 1.0
  2. encodeURI()                      javascript 1.5
  3. 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()

  •  然後介紹一下三個函式的使用場景:
  1. escape()函式用於js對字串進行編碼。不常用
  2.  encodeURI()用於整個url跳轉
  3. encodeURIComponent()用於引數的傳遞,引數包含特殊字元可能會造成間斷

 然後我今天遇到一個需求,上游頁面通過url來到我的頁面後會傳遞一個加密後的引數。我需要取出來,然後傳遞給我們的服務端。但是取出來之後裡邊的一些字元就自動轉換了,比如裡邊多了一些等於號=,加號+。然後這時候我需要把取到的query再經過encodeURIComponent()函式處理一下,才能得到最開始的url中的引數的格式。然後再寫別的邏輯就沒問題了。