1. 程式人生 > >escape()、encodeURI()、encodeURIComponent() 編碼解碼

escape()、encodeURI()、encodeURIComponent() 編碼解碼

escape 輸出 one body 說明 簡單 跳轉 blog 部分

  1 escape()、encodeURI()、encodeURIComponent()區別詳解
  2 
  3 JavaScript中有三個可以對字符串編碼的函數,分別是: escape,encodeURI,encodeURIComponent,相應3個解碼函數:unescape,decodeURI,decodeURIComponent 。
  4 
  5 下面簡單介紹一下它們的區別
  6 
  7 1 escape()函數
  8 
  9 定義和用法 
 10 escape() 函數可對字符串進行編碼,這樣就可以在所有的計算機上讀取該字符串。
 11 
 12 語法 
 13 escape(string)
14 15 參數 描述 16 string 必需。要被轉義或編碼的字符串。 17 18 返回值 19 已編碼的 string 的副本。其中某些字符被替換成了十六進制的轉義序列。 20 21 說明 22 該方法不會對 ASCII 字母和數字進行編碼,也不會對下面這些 ASCII 標點符號進行編碼: - _ . ! ~ * ‘ ( ) 。其他所有的字符都會被轉義序列替換。 23 24 25 26 27 2 encodeURI()函數 28 定義和用法 29 encodeURI() 函數可把字符串作為 URI 進行編碼。 30 31
語法 32 encodeURI(URIstring) 33 34 參數 描述 35 URIstring 必需。一個字符串,含有 URI 或其他要編碼的文本。 36 37 返回值 38 URIstring 的副本,其中的某些字符將被十六進制的轉義序列進行替換。 39 40 說明 41 該方法不會對 ASCII 字母和數字進行編碼,也不會對這些 ASCII 標點符號進行編碼: - _ . ! ~ * ‘ ( ) 。 42 43 該方法的目的是對 URI 進行完整的編碼,因此對以下在 URI 中具有特殊含義的 ASCII 標點符號,encodeURI() 函數是不會進行轉義的:;/?:@&=+$,# 44
45 46 47 48 3 encodeURIComponent() 函數 49 50 定義和用法 51 encodeURIComponent() 函數可把字符串作為 URI 組件進行編碼。 52 53 語法 54 encodeURIComponent(URIstring) 55 56 參數 描述 57 URIstring 必需。一個字符串,含有 URI 組件或其他要編碼的文本。 58 59 返回值 60 URIstring 的副本,其中的某些字符將被十六進制的轉義序列進行替換。 61 62 說明 63 該方法不會對 ASCII 字母和數字進行編碼,也不會對這些 ASCII 標點符號進行編碼: - _ . ! ~ * ‘ ( ) 。 64 65 其他字符(比如 :;/?:@&=+$,# 這些用於分隔 URI 組件的標點符號),都是由一個或多個十六進制的轉義序列替換的。 66 67 提示和註釋 68 提示:請註意 encodeURIComponent() 函數 與 encodeURI() 函數的區別之處,前者假定它的參數是 URI 的一部分(比如協議、主機名、路徑或查詢字符串)。因此 encodeURIComponent() 函數將轉義用於分隔 URI 各個部分的標點符號。 69 70 71 72 4 總結: 73 74 通過對三個函數的分析,我們可以知道:escape()除了 ASCII 字母、數字和特定的符號外,對傳進來的字符串全部進行轉義編碼,因此如果想對URL編碼,最好不要使用此方法。而encodeURI() 用於編碼整個URI,因為URI中的合法字符都不會被編碼轉換。encodeURIComponent方法在編碼單個URIComponent(指請求參 數)應當是最常用的,它可以講參數中的中文、特殊字符進行轉義,而不會影響整個URL。 75 76 77 78 5 示例: 79 80 1 escape() 81 82 <script type="text/javascript"> 83 84 document.write(escape("http://www.w3school.com.cn/") + "<br />") 85 86 document.write(escape("?!=()#%&")) 87 88 </script>輸出: 89 90 http%3A//www.w3school.com.cn 91 92 %3F%21%3D%28%29%23%25%26 93 94 2 encodeURI() 95 96 <script type="text/javascript"> 97 98 document.write(encodeURI("http://www.w3school.com.cn/")+ "<br />") 99 100 document.write(encodeURI("http://www.w3school.com.cn/My first/")) 101 102 document.write(encodeURI(",/?:@&=+$#")) 103 104 </script>輸出: 105 106 http://www.w3school.com.cn/ 107 108 http://www.w3school.com.cn/My%20first/ 109 110 ,/?:@&=+$# 111 112 對整個URL進行編碼,而URL的特定標識符不會被轉碼。 113 114 3 encodeURIComponent() 115 116 例1: 117 118 <script type="text/javascript"> 119 120 document.write(encodeURIComponent("http://www.w3school.com.cn/")) 121 122 document.write("<br />") 123 124 document.write(encodeURIComponent("http://www.w3school.com.cn/p 1/")) 125 126 document.write("<br />") 127 128 document.write(encodeURIComponent(",/?:@&=+$#")) 129 130 </script輸出: 131 132 http%3A%2F%2Fwww.w3school.com.cn 133 http%3A%2F%2Fwww.w3school.com.cn%2Fp%201%2F 134 %2C%2F%3F%3A%40%26%3D%2B%24%23 135 例2:<script language="javascript">document.write(‘ 136 137 <a href="http://passport.baidu.com/?logout&aid=7&u=‘+encodeURIComponent("http://cang.baidu.com/bruce42")+‘">退出</a>‘);</script> 138 139 對URL中的參數進行編碼,因為參數也是一個URL,如果不編碼會影響整個URL的跳轉。

escape()、encodeURI()、encodeURIComponent() 編碼解碼