js之encodeURI、encodeURIComponent、decodeURI、decodeURIComponent
encodeURI、encodeURIComponent、decodeURI、decodeURIComponent
js 對(duì)文字進(jìn)行編碼涉及2個(gè)函數(shù):encodeURI,encodeURIComponent,相應(yīng)2個(gè)解碼函數(shù):decodeURI,decodeURIComponent
用來編碼和解碼URI的
統(tǒng)一資源標(biāo)識(shí)符,或叫做 URI,是用來標(biāo)識(shí)互聯(lián)網(wǎng)上的資源(例如,網(wǎng)頁(yè)或文件)和怎樣訪問這些資源的傳輸協(xié)議(例如,HTTP 或 FTP)的字符串。
encodeURI 和 decodeURI 函數(shù)操作的是完整的 URI;這倆函數(shù)的URI 中的任何保留字符都有特殊意義,所有不會(huì)編碼它們。
encodeURI主要用于直接賦值給地址欄時(shí)候:
location.href=encodeURI("http://www.cnblogs.com/Tezml/");
encodeURIComponent 和 decodeURIComponent 函數(shù)操作的是組成 URI 的個(gè)別組件;encodeURIComponent 的作用:將文本字符串編碼為一個(gè)有效的統(tǒng)一資源標(biāo)識(shí)符 (URI)。這倆函數(shù)假定任何保留字符都代表普通文本,所以必須編碼它們,所以它們(保留字符)出現(xiàn)在一個(gè)完整 URI 的組件里面時(shí)不會(huì)被解釋成保留字符了。
原因:如果 username = 'a&foo=boo' 而不用 encodeURIComponent 的話,整個(gè)參數(shù)就成了 name=a&foo=boo, 這樣 CGI 就獲得兩個(gè)參數(shù) name 和 foo. 這不是我們想要的。
Javascript 里還有個(gè)同樣功能的函數(shù) encodeURI, 但是此方法不會(huì)對(duì)下列字符進(jìn)行編碼:":"、"/"、";" 和 "?"。
傳遞參數(shù)時(shí)需要使用encodeURIComponent
這樣組合的url才不會(huì)被#等特殊字符截?cái)唷?/p>
例如:
<script language="javascript">document.write('<a href="http://passport.baidu.com/?logout&aid=7& u='+encodeURIComponent(" rel="external nofollow" ?rel="external nofollow" http://cang.baidu.com/bruce42")+'">退出</a& gt;');</script>
<script language="javascript">document.write('<a href="http://passport.baidu.com/?logout&aid=7& u='+encodeURIComponent(" rel="external nofollow" rel="external nofollow" http://cang.baidu.com/bruce42")+'">退出</a& gt;');</script>
decodeURI()和decodeURIComponent()這兩個(gè)函數(shù)可以對(duì)特定函數(shù)生成的密碼字符串進(jìn)行解密操作,就可以生成為未解密的字符串,比較實(shí)用,
decodeURI()定義和用法
decodeURI() 函數(shù)可對(duì) encodeURI() 函數(shù)編碼過的URI 進(jìn)行解碼。
語(yǔ)法:decodeURI(URIstring)
參數(shù) 描述:URIstring 必需。一個(gè)字符串,含有要解碼的 URI 或其他要解碼的文本。
返回值:URIstring 的副本,其中的十六進(jìn)制轉(zhuǎn)義序列將被它們表示的字符替換。
decodeURIComponent()定義和用法
decodeURIComponent() 函數(shù)可對(duì) encodeURIComponent() 函數(shù)編碼的 URI 進(jìn)行解碼。
語(yǔ)法:decodeURIComponent(URIstring)
參數(shù) 描述:URIstring 必需。一個(gè)字符串,含有編碼 URI 組件或其他要解碼的文本。
返回值:URIstring 的副本,其中的十六進(jìn)制轉(zhuǎn)義序列將被它們表示的字符替換。
URL傳參中的字符加密及解碼方式
encodeURI/decodeURI、encodeURIComponent/decodeURIComponent 這四個(gè)方法的用處
都是用來編碼和解碼URI的。
encodedURI
函數(shù)通過將特定字符的每個(gè)實(shí)例替換為一個(gè)、兩個(gè)、三或四轉(zhuǎn)義序列來對(duì)統(tǒng)一資源標(biāo)識(shí)符 (URI) 進(jìn)行編碼 (該字符的 UTF-8 編碼僅為四轉(zhuǎn)義序列)由兩個(gè) "代理" 字符組成)。encodeURI 自身無法產(chǎn)生能適用于HTTP GET 或 POST 請(qǐng)求的URI,例如對(duì)于 XMLHTTPRequests, 因?yàn)?"&", "+", 和 "=" 不會(huì)被編碼,然而在 GET 和 POST 請(qǐng)求中它們是特殊字符。然而encodeURIComponent這個(gè)方法會(huì)對(duì)這些字符編碼。
decodeURI
函數(shù)解碼一個(gè)由encodeURI 先前創(chuàng)建的統(tǒng)一資源標(biāo)識(shí)符(URI)或類似的例程。
encodeURIComponent
是對(duì)統(tǒng)一資源標(biāo)識(shí)符(URI)的組成部分進(jìn)行編碼的方法。它使用一到四個(gè)轉(zhuǎn)義序列來表示字符串中的每個(gè)字符的UTF-8編碼(只有由兩個(gè)Unicode代理區(qū)字符組成的字符才用四個(gè)轉(zhuǎn)義字符編碼)。轉(zhuǎn)義除了字母、數(shù)字、(、)、.、!、~、*、'、-和_之外的所有
decodeURIComponent
方法用于解碼由 encodeURIComponent 方法或者其它類似方法編碼的部分統(tǒng)一資源標(biāo)識(shí)符(URI)。
若解碼字符串包含%,則會(huì)報(bào)錯(cuò)
原因如下:
escape/unescape函數(shù)對(duì)字符串進(jìn)行編碼。
此函數(shù)使字符串具有可移植性,這樣它就可以通過任何網(wǎng)絡(luò)傳輸?shù)饺魏沃С?ASCII 字符的計(jì)算機(jī)。
此函數(shù)對(duì)特殊字符進(jìn)行編碼,但以下字符除外: * @ - _ + . /
心得:
當(dāng)你需要轉(zhuǎn)碼/解碼的URL是需要一個(gè)完整、可直接訪問的URL時(shí),應(yīng)該使用encodeURI/decodeURI; 當(dāng)你需要轉(zhuǎn)碼/解碼的URL是作為鏈接的一部分,比如用作參數(shù)的情況,應(yīng)該使用encodeURIComponent/decodeURIComponent,針對(duì)用encodeURIComponent/decodeURIComponent時(shí)解析‘%’報(bào)錯(cuò)推薦使用escape/unescape函數(shù)可以避免頁(yè)面報(bào)錯(cuò)
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
總結(jié)AJAX相關(guān)JS代碼片段和瀏覽器模型
總結(jié)AJAX相關(guān)JS代碼片段和瀏覽器模型...2007-08-08小程序點(diǎn)贊收藏功能的實(shí)現(xiàn)代碼示例
這篇文章主要介紹了小程序點(diǎn)贊收藏功能的實(shí)現(xiàn)代碼示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-09-09layui監(jiān)聽下拉選框選中值變化的方法(包含監(jiān)聽普通下拉選框)
今天小編大家分享一篇layui監(jiān)聽下拉選框選中值變化的方法(包含監(jiān)聽普通下拉選框),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-09-09JS+CSS模擬可以無刷新顯示內(nèi)容的留言板實(shí)例
這篇文章主要介紹了JS+CSS模擬可以無刷新顯示內(nèi)容的留言板,涉及javascript操作dom元素、鼠標(biāo)事件及css樣式的技巧,需要的朋友可以參考下2015-03-03JavaScript 監(jiān)控微信瀏覽器且自帶返回按鈕時(shí)間
這篇文章主要介紹了JavaScript 監(jiān)控微信瀏覽器且自帶返回按鈕時(shí)間的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-11-11