视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
Javascript下的urlencode编码解码方法附decodeURIComponent
2020-11-27 20:25:54 责编:小采
文档

关于在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>

结果:

编码(原=烦恼):%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、chr相关的转换,如 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中文网!

下载本文
显示全文
专题