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