Javascript中encodeURI與encodeURIComponent區別

來源:互聯網
上載者:User

encodeURI 方法

將文本字串編碼為一個有效統一資源識別項 (URI)。

encodeURI(URIString)

必選的 URIString 參數代表一個已編碼的 URI。

說明
encodeURI 方法返回一個編碼的 URI。如果您將編碼結果傳遞給 decodeURI,那麼將返回初始的字串。encodeURI 方法不會對下列字元進行編碼:":"、"/"、";" 和 "?"。請使用 encodeURIComponent 方法對這些字元進行編碼。


encodeURIComponent 方法

將文本字串編碼為一個統一資源識別項 (URI) 的一個有效組件。

encodeURIComponent(encodedURIString)

必選的 encodedURIString 參數代表一個已編碼的 URI 組件。

說明
encodeURIComponent 方法返回一個已編碼的 URI。如果您將編碼結果傳遞給 decodeURIComponent,那麼將返回初始的字串。因為 encodeURIComponent 方法對所有的字元編碼,請注意,如果該字串代表一個路徑,例如 /folder1/folder2/default.html,其中的斜杠也將被編碼。這樣一來,當該編碼結果被作為請求發送到 網頁伺服器時將是無效的。如果字串中包含不止一個 URI 組件,請使用 encodeURI 方法進行編碼


一、encodeURI、encodeURIComponent概念比較
encodeURI —— 該函數不對 ASCII 字母和數字以及ASCII標點符號(包括- _ . ! ~ * ' ( ))進行編碼,其他字元(比如 :;/?:@&=+$,# 這些用於分隔 URI 組件的標點符號),也不會被轉義。

encodeURIComponent —— 該函數也不對 ASCII 字母和數字以及ASCII標點符號(包括- _ . ! ~ * ' ( ))進行編碼,其他字元(比如 :;/?:@&=+$,# 這些用於分隔 URI 組件的標點符號),會被由一個或多個十六進位組成的逸出序列替換。

decodeURI和decodeURIComponent是它們對應的解碼函數,不再多說。下面看一下測試代碼

二、encodeURI、encodeURIComponent測試代碼
1、測試JS代碼:

 代碼如下 複製代碼

<script type="text/javascript">
var tst="http://你的網域名稱/My dir/?a=http://metsky.com/b&c=你好";
document.write(tst+ "<br />");

var a=encodeURI(tst);
var b=decodeURI(a);
document.write(a+ "<br />");
document.write(b+ "<br />");

var c=encodeURIComponent(tst);
var d=decodeURIComponent(c);
document.write(c+ "<br />");
document.write(d);
</script>

2、指令碼輸出:

 代碼如下 複製代碼

http://你的網域名稱/My dir/?a=http://metsky.com/b&c='你好'

http://你的網域名稱/My%20dir/?a=http://metsky.com/b&c='%E4%BD%A0%E5%A5%BD'

http://你的網域名稱/My dir/?a=http://metsky.com/b&c='你好'

http%3A%2F%2F你的網域名稱%2FMy%20dir%2F%3Fa%3Dhttp%3A%2F%2Fmetsky.com%2Fb%26c%3D'%E4%BD%A0%E5%A5%BD'

http://你的網域名稱/My dir/?a=http://metsky.com/b&c='你好'

3、總結

留意一下上面輸出中的紅色部分,所以從表觀上的解釋(天緣自己理解*_*):

encodeURIComponent是把整個參數都當成一個Component處理了,認為你給我的東西後續使用時是“貼”在其它“標準”URI後面做參數值用的,而encodeURI則認為你就讓我編碼一個URI,這個URI可能是直接使用的。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.