Javascript下的urlencode編碼解碼方法decodeURIComponent()

來源:互聯網
上載者:User

關於在ASP(Server.UrlEncode)、PHP(urlencode())函數編碼結果,或是經過asp、php等動態語言直接寫入COOKIES的中文字元,用JS讀取的時候,都會碰到一個編碼的問題,那就是最終字串被urlencode編碼了,而又時有需要從JS在用戶端去讀取這些資料。而本文,就大概說說如何在js中通過系統內建的函數去解決這個問題。
而相信碰到過此問題的朋友應該都有所瞭解,目前網路上流行一些js下的自訂函數去解決這個問題,如說vbscript(URLDecode())、javascript(UrlDecode())等。而這兩個函數,都無法很好的與asp(Server.UrlEncode)、php(urlencode())這兩個函數相互連訊。
關於vbscript(function URLDecode())、javascript(function UrlDecode())在本文最後也會轉載出來。
而本文的主角就是javascript(UrlDecodedecodeURIComponent()),這個函數名稱實在太常了,個人真的不太瞭解,畢竟js的系統函數很多,很容易遺漏。煩惱在偶然間發現了這個函數!
編碼函數:encodeURIComponent()
解碼函數:decodeURIComponent()
decodeURIComponent()文法

decodeURIComponent(URIstring)
參 數:(URIstring)必需。一個字串,含有編碼 URI 組件或其他要解碼的文本。
傳回值:URIstring 的副本,其中的十六進位逸出序列將被它們表示的字元替換。

執行個體:

<script type="text/javascript"> var test1="煩惱"; var test2="%E7%83%A6%E6%81%BC"; document.write("編碼(原="+test1+"):"+encodeURIComponent(test1)+ "<br />"); document.write("解碼(原="+test2+"):"+decodeURIComponent(test2)); </script>

結果:

編碼(原=煩惱):%E7%83%A6%E6%81%BC

解碼(原=%E7%83%A6%E6%81%BC):煩惱

注意:本文只在UTF-8編碼環境下測試。因為在不同編碼環境下,asp(Server.UrlEncode)所編譯後的代碼好像不同,有待測試!

================================

附轉載:

vbscript(function URLDecode())

<script type="text/VBscript"><!--Function URLDecode(enStr)dim deStr,strSpecialdim c,i,vdeStr=""strSpecial="!""#$%&'()*+,.-_/:;<=>?@[\]^`{|}~%"for i=1 to len(enStr)c=Mid(enStr,i,1)if c="%" thenv=eval("&h"+Mid(enStr,i+1,2))if inStr(strSpecial,chr(v))>0 thendeStr=deStr&chr(v)i=i+2elsev=eval("&h"+ Mid(enStr,i+1,2) + Mid(enStr,i+4,2))deStr=deStr & chr(v)i=i+5end ifelseif c="+" thendeStr=deStr&" "elsedeStr=deStr&cend ifend ifnextURLDecode=deStrEnd function//--></script>

javascript(function UrlDecode())其實還是柔和使用了vbscript,好像在javascript環境中,對於asc、hex、chr相關的轉換,如 str.charCodeAt(0).toString(16) 及 String.fromCharCode(str) 在不同編碼下,對於中文的編碼結果還不統一。

比如: vbscript str2asc/asc2str

<script type="text/vbscript">     Function str2asc(strstr)     str2asc = hex(asc(strstr))     End Function     Function asc2str(ascasc)     asc2str = chr(ascasc)     End Function     MsgBox str2asc("a")    MsgBox asc2str("&H61")'16進位轉的61 轉到 10進位就是 97</script> 

javascript str2asc/asc2str

<script type="text/javascript"> function str2asc(str){    return str.charCodeAt(0).toString(16);}function asc2str(str){    return String.fromCharCode(str);}alert(str2asc("a"));//alert(asc2str("0x61"));//</script> 

示範:

<script type="text/vbscript"> Function str2asc(strstr) str2asc = hex(asc(strstr)) End Function Function asc2str(ascasc) asc2str = chr(ascasc) End Function </script> <script type="text/javascript"> /*這裡開始時UrlEncode和UrlDecode<a href="/?tag=%E5%87%BD%E6%95%B0" target="_blank">函數</a>*/ function UrlEncode(str){ var ret=""; var strSpecial="!\"#$%&'()*+,/:;<=>?[]^`{|}~%"; var tt= ""; for(var i=0;i<str.length;i++){ var chr = str.charAt(i); var c=str2asc(chr); tt += chr+":"+c+"n"; if(parseInt("0x"+c) > 0x7f){ ret+="%"+c.slice(0,2)+"%"+c.slice(-2); }else{ if(chr==" ") ret+="+"; else if(strSpecial.indexOf(chr)!=-1) ret+="%"+c.toString(16); else ret+=chr; } } return ret; } function UrlDecode(str){ var ret=""; for(var i=0;i<str.length;i++){ var chr = str.charAt(i); if(chr == "+"){ ret+=" "; }else if(chr=="%"){ var asc = str.substring(i+1,i+3); if(parseInt("0x"+asc)>0x7f){ ret+=asc2str(parseInt("0x"+asc+str.substring(i+4,i+6))); i+=5; }else{ ret+=asc2str(parseInt("0x"+asc)); i+=2; } }else{ ret+= chr; } } return ret; } alert(UrlDecode("%C2%D2%C2%EB")); </script>
相關文章

聯繫我們

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