最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

Javascript下的urlencode编码解码方法附decodeURIComponent

来源:懂视网 责编:小采 时间:2020-11-27 20:25:54
文档

Javascript下的urlencode编码解码方法附decodeURIComponent

Javascript下的urlencode编码解码方法附decodeURIComponent:关于在ASP(Server.UrlEncode)、PHP(urlencode())函数编码结果,或是经过asp、php等动态语言直接写入COOKIES的中文字符,用JS读取的时候,都会碰到一个编码的问题,那就是最终字符串被urlencode编码了,而又时有需要从JS在客户端去读取这些数据。而本文
推荐度:
导读Javascript下的urlencode编码解码方法附decodeURIComponent:关于在ASP(Server.UrlEncode)、PHP(urlencode())函数编码结果,或是经过asp、php等动态语言直接写入COOKIES的中文字符,用JS读取的时候,都会碰到一个编码的问题,那就是最终字符串被urlencode编码了,而又时有需要从JS在客户端去读取这些数据。而本文

关于在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中文网!

文档

Javascript下的urlencode编码解码方法附decodeURIComponent

Javascript下的urlencode编码解码方法附decodeURIComponent:关于在ASP(Server.UrlEncode)、PHP(urlencode())函数编码结果,或是经过asp、php等动态语言直接写入COOKIES的中文字符,用JS读取的时候,都会碰到一个编码的问题,那就是最终字符串被urlencode编码了,而又时有需要从JS在客户端去读取这些数据。而本文
推荐度:
标签: 方法 下面 js
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top