在介紹encodeURI()、encodeURIComponent()、decodeURI()、decodeURIComponent()方法前我們需要了解Global對象的概念:
Global(全局)對象可以說是ECMAScript中最特別的一個對象了,因為不管你從什么角度上看,這個對象都是不存在的。ECMAScript中的Global對象在某種意義上是作為一個終極的“兜底兒對象”來定義的。換句話說,不屬于任何其他對象的屬性和方法,最終都是它的屬性和方法。事實上,沒有全局變量或全局函數(shù);所有在全局作用域中定義的屬性和函數(shù),都是Global對象的屬性。本書前面介紹過的那些函數(shù),諸如isNaN()、isFinite()、parselnt()以及parseFloat(),實際上全都是Global對象昀方法。除此之外,Global對象還包含其他一些方法。
URI編碼方法
Global對象的encodeURI()和encodeURIComponent()方法可以對URI (Uniform ResourceIdentifiers,通用資源標識符)進行編碼,以便發(fā)送給瀏覽器。有效的URI中不能包含某些字符,例如空格。而這URI編碼方法就可以對URI進行編碼,它們用特殊的UTF-8編碼替換所有無效的字 符,從而讓瀏覽器能夠接受和理解。
其中encodeURI()主要用于整個URI(例如,http://www.gimmickmag.com/illegal value.htm),而encode-URIComponent()主要用于對URI中的某一段(例如前面URI中的illegal value.htm)進行編碼。它們的主要區(qū)別在于,encodeURI()不會對本身屬于URI的特殊字符進行編碼,例如冒號、正斜杠、問號和井字號;而encodeURIComponent()則會對它發(fā)現(xiàn)的任何非標準字符進行編碼。來看下面的例子:
var uri="http://www.gimmickmag.com/illegal value.htm#start";
//”http: //www.gimmickmag.com/illegal%20value .htm#s tart”
alert(encodeURI (uri)):
//”http% 3A%2F%2Fwww.gimmickmag.com%2 Fillegal%2 0value. htm%23 start”
alert( encodaURIComponent (uri));
使用encodeURI()編碼后的結果是除了空格之外的其他字符都原封不動,只有空格被替換成了%20。而encodeURIComponent()方法則會使用對應的編碼替換所有非字母數(shù)字字符。這也正是可以對整個URI使用encodeURI(),而只能對附加在現(xiàn)有URI后面的字符串使用encodeURIComponent()的原因所在。一般來說,我們使用encodeURIComponent()方法的時候要比使用encodeURI()更多,因為在實踐中更常見的是對查詢字符串參數(shù)而不是對基礎URL進行編碼.
與encodeURI()和encodeURIComponent()方法對應的兩個方法分別是decodeURI()和decodeURIComponent()。其中,decodeURI()只能對使用encodeURI()替換的字符進行解碼。例如, 它可將%20替換成一個空格,但不會對%23作任何處理,因為%23表示井字號(#),而井字號不是使用encodeUR工()替換的。同樣地,decodeURIComponent()能夠解碼使用encodeURIComponent()編碼的所有字符,即它可以解碼任何特殊字符的編碼。來看下面的例子:
var uri=”http%3A%2F%2Fwww.gimmickmag.com%2Fillegal%2 0value.htm%23 start”;
//http% 3A%2F%2Fwww. jxbh.cn%2 Fillegal value .htm%23 start
alert( decodeURI(uri));
//http: //www.gimmickmag.com/illegal value .htm# start
alert( decodeURIComponent (uri));
這里,變量uri包含著一個由encodeURIComponent()編碼的字符串。在第一次調用decodeURI()
輸出的結果中,只有%20被替換成了空格。而在第二次調用decodeURIComponent()輸出的結果中,所有特殊字符的編碼都被替換成了原來的字符,得到了一個未經轉義的字符串(但這個字:一個有效的URI)。
南昌網站建設公司百恒網絡工程師提示,URI方法encodeURI()、encodeURIComponent()、decodeURI()和decodeURIComponent()用于替代已經被ECMA-262第3版廢棄的escape()和unescape()方法,URI方法能夠編碼所有Unicode字符,而原來的方法只能正確地編碼ASCII字符.因為在開發(fā)實踐中,特別是在產品級的代碼中,一定要使用URI方法.不要使用escape()和unescape()方法.
本資料僅限南昌網絡公司百恒網絡技術部內部人員交流使用,方便內部技術人員學習交流,請勿作其他用途.謝謝支持! 南昌網站建設第一品牌,專業(yè)專注于南昌網站設計|南昌做網站,為用戶提供高品質的網絡產品和優(yōu)質的服務是我們始終追求的目標! 文章出自:南昌建網站公司-百恒網絡 http://www.gimmickmag.com 如轉載請注明出處!