Maison  >  Article  >  interface Web  >  Méthode d'encodage et décodage Urlencode sous Javascript avec decodeURIComponent

Méthode d'encodage et décodage Urlencode sous Javascript avec decodeURIComponent

高洛峰
高洛峰original
2017-02-04 09:36:051400parcourir

Concernant les résultats d'encodage de la fonction ASP (Server.UrlEncode), PHP (urlencode()), ou les caractères chinois écrits directement dans les COOKIES via des langages dynamiques tels que asp et php, lors de la lecture avec JS, vous rencontrerez a Le problème d'encodage est que la chaîne finale est encodée par urlencode, et il est parfois nécessaire de lire les données depuis JS côté client.

Cet article expliquera brièvement comment résoudre ce problème en js via les propres fonctions du système.

Je pense que les amis qui ont rencontré ce problème devraient avoir une certaine compréhension. Actuellement, certaines fonctions personnalisées sous js sont populaires sur Internet pour résoudre ce problème, comme vbscript (URLDecode()), javascript (UrlDecode( ))attendez. Aucune de ces deux fonctions ne peut bien communiquer entre elles asp (Server.UrlEncode) et php (urlencode()).
A propos de vbscript (fonction URLDecode()) et javascript (fonction UrlDecode()) seront également reproduits à la fin de cet article.

Le protagoniste de cet article est javascript (UrlDecodedecodeURIComponent()). Ce nom de fonction est si courant que je ne le comprends pas vraiment personnellement. Après tout, il existe de nombreuses fonctions système en js et c'est facile à comprendre. ça me manque. Worry a découvert cette fonction par accident !

Fonction d'encodage : encodeURIComponent()
Fonction de décodage : decodeURIComponent()
Syntaxe decodeURIComponent()

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

Exemple :

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

Résultat :

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

Remarque : cet article est uniquement testé dans un environnement d'encodage UTF-8. Parce que dans différents environnements d'encodage, le code compilé d'asp (Server.UrlEncode) semble être différent et doit être testé !
Réimpression ci-jointe :
vbscript (fonction 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 (fonction UrlDecode()) utilise en fait vbscript doucement Il semble que dans l'environnement javascript, pour asc, hex, conversions liées à chr, telles que str.charCodeAt(0).toString(16) et String.fromCharCode(str), les résultats de codage pour le chinois ne sont pas uniformes sous différents codages.
Par exemple : 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>

Démo :

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

Plus d'encodage et de décodage d'urlencode sous Javascript Veuillez prêter attention au site Web PHP chinois pour les articles connexes sur decodeURIComponent attachés à la méthode !

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn