首頁  >  文章  >  web前端  >  Javascript下的urlencode編碼解碼方法附decodeURIComponent

Javascript下的urlencode編碼解碼方法附decodeURIComponent

高洛峰
高洛峰原創
2017-02-04 09:36:051346瀏覽

關於在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>

reee

因為在不同編碼環境下,asp(Server.UrlEncode)編譯後的程式碼好像不同,有待測試!

附轉載: 
vbscript(function URLDecode()) 

编码(原=烦恼):%E7%83%A6%E6%81%BC 
解码(原=%E7%83%A6%E6%81%BC):烦恼

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

例如: vbscript str2asc/asc2str 

<script type="text/VBscript"> 
<!-- 
Function URLDecode(enStr) 
    dim deStr,strSpecial 
    dim c,i,v 
    deStr="" 
    strSpecial="!""#$%&&#39;()*+,.-_/:;<=>?@[\]^`{|}~%" 
    for i=1 to len(enStr) 
        c=Mid(enStr,i,1) 
        if c="%" then 
            v=eval("&h"+Mid(enStr,i+1,2)) 
            if inStr(strSpecial,chr(v))>0 then 
            deStr=deStr&chr(v) 
            i=i+2 
            else 
            v=eval("&h"+ Mid(enStr,i+1,2) + Mid(enStr,i+4,2)) 
            deStr=deStr & chr(v) 
            i=i+5 
            end if 
        else 
            if c="+" then 
            deStr=deStr&" " 
            else 
            deStr=deStr&c 
            end if 
        end if 
    next 
    URLDecode=deStr 
End function 
//--> 
</script>

javascript 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")&#39;16进制转的61 转到 10进制就是 97 
</script>

示範: 

<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>

分網相關下的urlencodePent生活方法附贈與中文更多相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn