Javascript下的urlencode编码解码方法decodeURIComponent()
2015-06-18 00:00
741 查看
而相信碰到过此问题的朋友应该都有所了解,目前网络上流行一些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 的副本,其中的十六进制转义序列将被它们表示的字符替换。
实例:
1 2 3 4 5 6 | <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())
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | <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 endif else if c="+" then deStr=deStr&" " else deStr=deStr&c endif endif next URLDecode=deStr Endfunction //--> </script> |
比如: vbscript str2asc/asc2str
1 2 3 4 5 6 7 8 9 10 | <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> |
1 2 3 4 5 6 7 8 9 10 | <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> |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 | <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 全半角转换
- 最简洁短小的 JavaScript 判定 IE 浏览器
- JS计算每个字符出现的次数
- javascript通用循环遍历方法forEach
- JS中的!=、== 、!==、===的用法和区别
- 如何使用JavaScript和正则表达式进行数据验证
- currentstyle 和 getComputedStyle—JS学习笔记2015-6-17(第59天)
- 理解Javascript_03_javascript全局观
- 理解Javascript_02_理解undefined和null
- 理解Javascript_01_理解内存分配
- FastJSON
- 基于js的网页计算器实现
- js删除提示的插件实现
- javascript数组基础知识(一)
- JS练习题之字符串一
- JavaScript 的 Promise
- smarty向js传递变量时应该注意的问题
- js跨域问题
- JSP九大内置对象2015-06-17
- JSP的七大动作指令2015-06-17