JS系列之url編碼

ASCII 字符

ASCII(American Standard Code for Information Interchange,美國信息互換標準代碼)是基於拉丁字母的一套電腦編碼系統。它主要用於顯示現代英語和其餘西歐語言。它是現今最通用的單字節編碼系統,並等同於國際標準ISO/IEC 646。安全

如下是部分ASCII碼對照表:
圖片描述函數

爲何須要對URI進行編碼

對於Url來講,之因此要進行編碼,是由於Url中有些字符會引發歧義。編碼

Javascript中提供了3對函數用來對Url編碼以獲得合法的Url:url

  1. escape --> unescape
  2. encodeURI --> decodeURI
  3. encodeURIComponent --> decodeURIComponent

下面的表格列出了這三個函數的安全字符(即函數不會對這些字符進行編碼):
圖片描述spa

escape --> unescape

  • 不對 ASCII 字母、數字進行編碼
  • 不對 *@-_+./ 進行編碼
  • 其餘全部的字符都會被轉義序列替換

這個方法屬於過期產物,ECMAScript v3 反對使用該方法,應用使用 encodeURI() 和 encodeURIComponent() 替代它。code

encodeURI --> decodeURI

  • 不對 ASCII 字母和數字進行編碼。
  • 不對 -_.!~*'();/?:@&=+$,# 這20個ASCII 標點符號進行編碼。
  • 其餘全部的字符都會被轉義序列替換

encodeURIComponent --> decodeURIComponent

它跟encodeURI的區別就是,encodeURI是對整個url進行編碼,而encodeURIComponent是對url的個別部分進行編碼。
若是 URI 組件中含有分隔符,好比 ? 和 #,則應當使用 encodeURIComponent() 方法分別對各組件進行編碼orm

encodeURIComponent('http://www.baidu.com?name=zhang@xiao@jie&order=1');
// http%3A%2F%2Fwww.baidu.com%3Fname%3Dzhang%40xiao%40jie%26order%3D1
相關文章
相關標籤/搜索