關於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顯示錯誤。不會被此方法編碼的字符:! * ( ),反向編碼函數:decodeURIComponent()

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

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章