encodeURI()和encodeURIComponent()方法用于編碼傳遞給瀏覽器的URI(統(tǒng)一資源標(biāo)識(shí)符)。有效的URI不 能包含某些字符,如空格。這兩個(gè)方法用于編碼URI,這樣用專門的UTF-8編碼替換所有的非有效字符,就可以使瀏覽器仍能夠接受并理解它們。

encodeURI() 方法用于處理完整的URI(例如,http://www.itlobo.com/illegal value.htm),而encodeURIComponent()用于處理URI的一個(gè)片斷(如前面的URI中的illegal value.htm)。這兩個(gè)方法的主要區(qū)別是encodeURI()方法不對(duì)URI中的特殊字符進(jìn)行編碼,如冒號(hào)、前斜杠、問(wèn)號(hào)和英鎊符號(hào),而 encodeURIComponent()則對(duì)它發(fā)現(xiàn)的所有非標(biāo)準(zhǔn)字符進(jìn)行編碼。例如:

這段代碼輸出兩個(gè)值:

可以看到,除空 格外,第一個(gè)URI無(wú)任何改變,空格被替換為%20。第二個(gè)URI中的所有非字母數(shù)字字符都被替換成它們對(duì)應(yīng)的編碼,基本上使這個(gè)URI變得無(wú)用。這就是 encodeURI()可以處理完整URI,而encodeURIComponent()只能處理附加在已有URI末尾的字符串的原因。

自 然,還有兩個(gè)方法用于解碼編碼過(guò)的URI,即decodeURI()和decodeURIComponent()。如你所料,這兩個(gè)方法所做的恰與其對(duì)應(yīng) 的方法相反。decodeURI()方法只對(duì)用encodeURI()方法替換的字符解碼。例如,%20將被替換為空格,而%23不會(huì)被替換,因?yàn)樗硎?的是英鎊符號(hào)(#),encodeURI()并不替換這個(gè)符號(hào)。同樣的,decodeURIComponent()會(huì)解碼所有 encodeURIComponent()編碼過(guò)的字符,意味著它將對(duì)所有的特殊值解碼。例如:

這段代碼輸出兩個(gè)值:

在這個(gè) 例子中,變量uri存放的是用encodeURIComponent()編碼的字符串。生成的值說(shuō)明了應(yīng)用兩個(gè)解碼方法時(shí)會(huì)發(fā)生的事情。第一個(gè)值由 decodeURI()輸出,把%20替換成空格。第二個(gè)值由decodeURIComponent()輸出,替換所有的特殊。

這些URI 方法encodeURI()、encodeURIComponent()、decodeURI()和decodeURICom- ponent()代替了BOM的escape()和unescape()方法。URI方法更可取,因?yàn)樗鼈儠?huì)對(duì)所有Unicode符號(hào)編碼,而BOM方法 只能對(duì)ASCII符號(hào)正確編碼。盡量避免使用escape()和unescape()方法。

用AJAX提交數(shù)據(jù)時(shí):

      發(fā)送端用encodeURIComponent(escape(xxxxxxx))就可以了(其他發(fā)送接受代碼同上)

ASP端接收方法:


<%
Response.Charset="gb2312"
Response.Write Unescape(Request("act"))
%>