encodeURI,encodeURIComponent編碼

來源:互聯網
上載者:User

標籤:

encodeURI()、encodeURIComponent()、decodeURI()、decodeURIComponent() URL編碼

Global對象的encodeURI()和encodeURIComponent()方法對URI進行編碼,以便發送給瀏覽器。有效URI中不能包含某些字元,例如空
格。而這兩個URI編碼方法就可以對URI進行編碼,它們用特殊的UTF-8編碼替換所有無效的字元,從而讓瀏覽器接受和理解。

其中,encodeURI()主要用於整個URI(例如,http://www.w3cmm.com/illegal value.htm),而encodeURIComponent()主要用於對URI中的某一段(例如前面URI中的illegal value.htm)進行編碼。它們的主要區別在於,encodeURI()不會對本身術語URI的特殊字元進行編碼,例如冒號、正斜杠、問號和井字型大小;而encodeURIComponent()則會對它發現的任何 非標準字元進行編碼。來看下面的例子:

var uri = "http://www.w3cmm.com/illegal value.htm#start";
//"http://www.w3cmm.com/illegal%20value.htm#start"
alert(encodeURI(uri));

//"http%3A%2F%2Fwww.w3cmm.com%2Fillegal%20value.htm%23start"
alert(encodeURIComponent(uri));

使用encodeURI()編碼後的結果是除了空格之外的其它字元都原封不動,只有空格被替換成了%20。而在encodeURIComponent()方法則會使用對應的編碼替換所有非字母數字字元。這也正是可以對整個URI使用encodeURI(),而只能對附加在現有URI後面的字串使用encodeURIComponent()的原因所在。

一般來說,我們使用encodeURIComponent()方法的時候要比使用encodeURI()更多,因為在實踐中更常見的是對查詢字串參數而不是對基礎URI進行編碼。

與encodeURI()和encodeURIComponent()方法對應的兩個方法分別是decodeURI()和decodeURIComponent()。其中,decodeURI()只能對使用encodeURI()替換的字元進行解碼。例如,它可將%20替換成一個空格,但不會對%23作任何處理,因為%23表示井字型大小(#),而井字型大小不是使用encodeURI替換的。同樣地,decodeURIComponent()能夠解碼使用encodeURIComponent()編碼的所有字元,即它可以解碼任何特殊字元的編碼。來看下面的例子:

var uri = "http%3A%2F%2Fwww.w3cmm.com%2Fillegal%20value.htm%23start"
//"http%3A%2F%2Fwww.w3cmm.com%2Fillegal value.htm%23start"
alert(decodeURI(uri));

//"http://www.w3cmm.com/illegal value.htm#start"
alert(decodeURIComponent(uri));

這裡,變數uri包含著一個由encodeURIComponent()編碼的字串。在第一次調用decodeURI()輸出的結果中,只有%20被替換成了空格。而在第二次調用decodeURIComponent()輸出的結果中,所有特殊字元的編碼都被替換成了原來的字元,得到了一個未經轉義的字串。

URI方法encodeURI()、encodeURIComponent()、decodeURI()和decodeURIComponent()用於替代已經被ECMA-262第三版廢棄的escape()和unescape()方法。URI方法能夠編碼所有Unicode字元,而原來的方法只能正確地編碼ASCII字元。因此在開發實踐中,特別是在產品級的代碼中,一定要使用URI方法,不要使用escape()和unescape()方法。

 

encodeURI,encodeURIComponent編碼

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.