首頁 > web前端 > js教程 > 主體

JavaScript encodeURI 和encodeURIComponent_javascript技巧

WBOY
發布: 2016-05-16 15:27:26
原創
1569 人瀏覽過

encodeURI和encodeURIComponet函數都是javascript中用來對URI進行編碼,將相關參數轉換成UTF-8編碼格式的資料。 URI在進行定位跳轉時,參數裡面的中文、日文等非ASCII編碼都會進行編碼轉換。

這兩個函數函數上面比較接近,但是有些差異。

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

問題:

  ajax.get ( url '?k1'=v1 '&k2'=v2 '&k3'=v3, ... ); 

  由於URL只進行了encodeURI編碼,所以想提交的參數有searchWord = a b時,變成了a b。 

解決方法: 

  ajax.post( url, params,....) 

  其中params是物件。 

  原因:如果參數是物件或陣列時,元件庫已經幫你進行encodeURIComponent了。 而如果你只是字串,元件庫就什麼也沒做,所以到後端時就把特殊字元給過濾了。 

  encodeURI()用法

  此方法不會對 ASCII 字母和數字進行編碼,也不會對這些 ASCII 標點符號進行編碼: - _ . ! ~ * ' ( ) 。 

  此方法的目的是對URI 進行完整的編碼,因此對以下在URI 中具有特殊意義的ASCII 標點符號,encodeURI() 函數是不會進行轉義的:;/?:@&= $, # 

  提示:如果 URI 元件中含有分隔符,例如 ? 和 #,則應使用 encodeURIComponent() 方法分別對各元件進行編碼。

  範例:

document.write(encodeURI("http://www.w3school.com.cn")+ "<br />") 
document.write(encodeURI("http://www.w3school.com.cn/My first/")) 
document.write(encodeURI(",/&#63;:@&=+$#")) 
//批注:只转换域名后面的部分,并且对,/&#63;:@&=+$#不处理。 
// http://www.w3school.com.cn 
// http://www.w3school.com.cn/My%20first/ 
// ,/&#63;:@&=+$#  

登入後複製

  decodeURI() 函數可對 encodeURI() 函數編碼過的 URI 進行解碼。

  encodeURIComponent()用法 

  此方法不會對 ASCII 字母和數字進行編碼,也不會對這些 ASCII 標點符號進行編碼: - _ . ! ~ * ' ( ) 。 

  其他字元(例如 :;/?:@&= $,# 這些用來分隔 URI 元件的標點符號),都是由一個或多個十六進位的轉義序列取代的。

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

  範例:

document.write(encodeURIComponent("http://www.w3school.com.cn")) 
document.write(encodeURIComponent("http://www.w3school.com.cn/p 1/")) 
document.write(encodeURIComponent(",/&#63;:@&=+$#")) 
//对比 
// http%3A%2F%2Fwww.w3school.com.cn 
// http%3A%2F%2Fwww.w3school.com.cn%2Fp%201%2F 
// %2C%2F%3F%3A%40%26%3D%2B%24%23  
登入後複製

  decodeURIComponent() 函式可對 encodeURIComponent() 函式編碼的 URI 進行解碼。

相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!