javascript中encodeURIComponent()用法

來源:互聯網
上載者:User

encodeURIComponent() 函數可把字串作為 URI 組件進行編碼。

文法:encodeURIComponent(URIstring)

參數描述:URIstring 必需。一個字串,含有 URI 組件或其他要編碼的文本。

傳回值:URIstring 的副本,其中的某些字元將被十六進位的逸出序列進行替換。

說明:該方法不會對 ASCII 字母和數字進行編碼,也不會對這些 ASCII 標點符號進行編碼: – _ . ! ~ * ‘ ( ) 。其他字元(比如 :;/?:@&=+$,# 這些用於分隔 URI 組件的標點符號),都是由一個或多個十六進位的逸出序列替換的。

提 示:請注意 encodeURIComponent() 函數 與 encodeURI() 函數的區別之處,前者假定它的參數是 URI 的一部分(比如協議、主機名稱、路徑或查詢字串)。因此 encodeURIComponent() 函數將轉義用於分隔 URI 各個部分的標點符號。

執行個體:

在本例中,我們將使用 encodeURIComponent() 對 URI 進行編碼:

 代碼如下 複製代碼

<script type="text/javascript">
 document.write(encodeURIComponent("http://www.w3school.com.cn"));
 document.write("<br />");
 document.write(encodeURIComponent("http://www.w3school.com.cn/p 1/"));
 document.write("<br />");
 document.write(encodeURIComponent(",/?:@&=+$#"));
</script>

輸出:

http%3A%2F%2Fwww.111cn.net
http%3A%2F%2Fwww.111cn.net%2Fp%201%2F
%2C%2F%3F%3A%40%26%3D%2B%24%23

escape() 方法:
采 用ISO Latin字元集對指定的字串進行編碼。所有的空格符、標點符號、特殊字元以及其他非ASCII字元都將被轉化成%xx格式的字元編碼(xx等於該字元 在字元集表裡面的編碼的16進位數字)。比如,空格符對應的編碼是%20。unescape方法與此相反。不會被此方法編碼的字元: @ * / +

encodeURI() 方法:
把URI字串採用UTF-8編碼格式轉化成escape格式的字串。不會被此方法編碼的字元:! @ # $& * ( ) = : / ; ? + ‘

encodeURIComponent() 方法:
把 URI字串採用UTF-8編碼格式轉化成escape格式的字串。與encodeURI()相比,這個方法將對更多的字元進行編碼,比如 / 等字元。所以如果字串裡麵包含了URI的幾個部分的話,不能用這個方法來進行編碼,否則 / 字元被編碼之後URL將顯示錯誤。不會被此方法編碼的字元:! * ( )

因此,對於中文字串來說,如果不希望把字串編碼格式轉化成UTF-8格式的(比如原頁面和目標頁面的charset是一致的時候),只需要使用 escape。如果你的頁面是GB2312或者其他的編碼,而接受參數的頁面是UTF-8編碼的,就要採用encodeURI或者 encodeURIComponent。

另外,encodeURI/encodeURIComponent是在javascript1.5之後引進的,escape則在javascript1.0版本就有。

通過js encodeURIComponent傳到伺服器的亂碼問題

二、解決過程:(1) 在JSP中使用encodeURIComponent來進行編碼,兩次編碼:

 

 代碼如下 複製代碼

content=encodeURIComponent(encodeURIComponent(content));  
var url="${pageContext.request.contextPath}/BlogAction.do?method=doPublishBlog&content="+content;  

content=encodeURIComponent(encodeURIComponent(content));
var url="${pageContext.request.contextPath}/BlogAction.do?method=doPublishBlog&content="+content;   

(2) 在action中使用解碼:

Java代碼 

 代碼如下 複製代碼

String content=(String)request.getParameter("content");  
content=URLDecoder.decode(content,"UTF-8"); 

String content=(String)request.getParameter("content");
content=URLDecoder.decode(content,"UTF-8");  

這個問題得以解決。


1)js 中encodeURI 與 encodeURIComponent的區別

encodeURI 方法返回一個編碼的 URI。如果您將編碼結果傳遞給 decodeURI,那麼將返回初始的字串。encodeURI 方法不會對下列字元進行編碼:":"、"/"、";" 和 "?"。請使用 encodeURIComponent 方法對這些字元進行編碼。經過我測試“#”也屬於這個特殊字元的範疇,使用encodeURI編碼時#是不會被編碼的,所以上面情境的問題依然存在的,對於這種輸入的內容,肯定是用encodeURIComponent。

 

(2)IE對#的不同處理,從下面的header 內容可以看出來。

 代碼如下 複製代碼

IE8:

POST /dcwb/BlogAction.do?method=doPublishBlog&content=%23���Ի���%23&decorator=exclude&gridId=&gridName=&videoId=&imageId=&topicId=

 IE6:

POST /dcwb/BlogAction.do?method=doPublishBlog&content=%23��������%20&decorator=exclude&gridId=&gridName=&videoId=&imageId=&topicId= HTTP/1.1


最多使用的應為encodeURIComponent,它是將中文、韓文等特殊字元轉換成utf-8格式的url編碼,所以如果給後台傳遞參數需要使用encodeURIComponent時需要後台解碼對utf-8支援(form中的編碼方式和當前頁面編碼方式相同)

escape不編碼字元有69個:*,+,-,.,/,@,_,0-9,a-z,A-Z

encodeURI不編碼字元有82個:!,#,$,&,',(,),*,+,,,-,.,/,:,;,=,?,@,_,~,0-9,a-z,A-Z

encodeURIComponent不編碼字元有71個:!, ',(,),*,-,.,_,~,0-9,a-z,A-Z

相關文章

聯繫我們

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