Heim  >  Artikel  >  Web-Frontend  >  Die URL-Kodierungs- und Dekodierungsmethode unter Javascript ist mit decodeURIComponent verbunden

Die URL-Kodierungs- und Dekodierungsmethode unter Javascript ist mit decodeURIComponent verbunden

高洛峰
高洛峰Original
2017-02-04 09:36:051400Durchsuche

In Bezug auf die Codierungsergebnisse von ASP (Server.UrlEncode), der PHP-Funktion (urlencode()) oder den chinesischen Zeichen, die über dynamische Sprachen wie ASP und PHP direkt in COOKIES geschrieben werden, werden Sie beim Lesen mit JS auf Folgendes stoßen a Das Codierungsproblem besteht darin, dass die endgültige Zeichenfolge durch URLencode codiert wird und es manchmal erforderlich ist, die Daten von JS auf der Clientseite zu lesen.

In diesem Artikel wird kurz darauf eingegangen, wie dieses Problem in js durch die systemeigenen Funktionen gelöst werden kann.

Ich glaube, dass Freunde, die auf dieses Problem gestoßen sind, etwas Verständnis haben sollten. Derzeit sind einige benutzerdefinierte Funktionen unter js im Internet beliebt, um dieses Problem zu lösen, wie z. B. vbscript (URLDecode()), Javascript (UrlDecode(). ))Warten. Keine dieser beiden Funktionen kann gut miteinander kommunizieren: asp (Server.UrlEncode) und php (urlencode()).
Über vbscript (Funktion URLDecode()) und Javascript (Funktion UrlDecode()) wird am Ende dieses Artikels ebenfalls berichtet.

Der Protagonist dieses Artikels ist Javascript (UrlDecodedecodeURIComponent()). Dieser Funktionsname ist so gebräuchlich, dass ich ihn persönlich nicht wirklich verstehe. Schließlich gibt es in js viele Systemfunktionen und es ist einfach vermisse es. Worry hat diese Funktion zufällig entdeckt!

Kodierungsfunktion: encodeURIComponent()
Dekodierungsfunktion: decodeURIComponent()
decodeURIComponent()-Syntax

decodeURIComponent(URIstring) 
参 数:(URIstring)必需。一个字符串,含有编码 URI 组件或其他要解码的文本。 
返回值:URIstring 的副本,其中的十六进制转义序列将被它们表示的字符替换。

Beispiel:

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

Ergebnis:

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

Hinweis: Dieser Artikel wurde nur in der UTF-8-Kodierungsumgebung getestet. Denn in verschiedenen Codierungsumgebungen scheint der kompilierte Code von asp (Server.UrlEncode) unterschiedlich zu sein und muss getestet werden!
Beigefügter Nachdruck:
vbscript (Funktion URLDecode())

<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 (Funktion UrlDecode()) verwendet vbscript tatsächlich sanft für asc, hex, Bei chr-bezogenen Konvertierungen wie str.charCodeAt(0).toString(16) und String.fromCharCode(str) sind die Kodierungsergebnisse für Chinesisch unter verschiedenen Kodierungen nicht einheitlich.
Zum Beispiel: 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")&#39;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>

Demo:

<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="!\"#$%&&#39;()*+,/:;<=>?[]^`{|}~%"; 
        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>

Mehr URL-Kodierung und -Dekodierung unter Javascript Bitte beachten Sie die chinesische PHP-Website für verwandte Artikel zu decodeURIComponent, die der Methode beigefügt sind!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn