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="!""#$%&'()*+,.-_/:;<=>?@[\]^`{|}~%" 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")'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>
Javascript에서 더 많은 urlencode 인코딩 및 디코딩 방법을 보려면 decodeURIComponent를 첨부하세요. 관련 기사를 확인하세요. PHP 중국어 웹사이트를 팔로우하세요!