>  기사  >  웹 프론트엔드  >  Javascript의 urlencode 인코딩 및 디코딩 방법은 decodeURIComponent와 함께 첨부됩니다.

Javascript의 urlencode 인코딩 및 디코딩 방법은 decodeURIComponent와 함께 첨부됩니다.

高洛峰
高洛峰원래의
2017-02-04 09:36:051398검색

ASP(Server.UrlEncode), PHP(urlencode()) 함수 또는 asp, php 등의 동적 언어를 통해 COOKIES에 직접 작성한 한자의 인코딩 결과를 JS로 읽을 때 접하게 되는 내용은 다음과 같습니다. a 인코딩 문제는 최종 문자열이 urlencode로 인코딩되어 클라이언트 측에서 JS에서 데이터를 읽어야 하는 경우가 있다는 것입니다.

이 글에서는 js에서 이 문제를 시스템 자체 기능을 통해 어떻게 해결하는지 간략하게 설명하겠습니다.

이 문제를 겪은 친구들은 어느 정도 이해해야 한다고 생각합니다. 현재 이 문제를 해결하기 위해 vbscript(URLDecode()), javascript(UrlDecode( ))기다리다. 이 두 함수 중 어느 것도 asp(Server.UrlEncode) 및 php(urlencode())와 잘 통신할 수 없습니다.
vbscript(함수 URLDecode()) 및 javascript(함수 UrlDecode())에 대한 내용도 이 글의 마지막 부분에 재현됩니다.

이 글의 주인공은 javascript(UrlDecodedecodeURIComponent())입니다. 이 함수 이름은 너무 흔해서 개인적으로는 잘 이해가 안 되네요. 그리워요. 우연히 이 기능을 발견한 Worry!

인코딩 함수: 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,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(function UrlDecode())는 실제로 vbscript를 부드럽게 사용하는 것 같은데, javascript 환경에서는 asc, hex와 관련이 있는 것 같습니다. 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")&#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>

데모:

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

Javascript에서 더 많은 urlencode 인코딩 및 디코딩 방법을 보려면 decodeURIComponent를 첨부하세요. 관련 기사를 확인하세요. PHP 중국어 웹사이트를 팔로우하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.