关于JAVASCRIPT urldecode URL解码的问题


Posted in Javascript onJanuary 08, 2012

这个时候,出现了encodeURIComponent、decodeURIComponent,它可以完全的对URL进行编码解码,但是遇到例如搜索引擎用到的部分转码,又摸不到门了,没问题,PHP官方出了一个解决方案:

decodeURIComponent((str + '').replace(/\+/g, '%20'));

他可以完美的对搜索引擎的地址进行解码,因为搜索引擎只习惯对”空格“进行转码。忘了说还习惯对中文进行转码。。。
那以上所有的方案遇到中文就崩溃了,是的,我也崩溃了,即是部分编码,又是中文。。这让我情何以堪。。。
查了很久可以,不多说你懂的。。。
<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; 
} 
</script>

这个呢对仅对支持VB的浏览器支持。。。例如FF就不支持了。。。
为什么要用到VB呢?因为str2asc、asc2str这种方法是JS不能满足的。。。下面我模拟了两个JS方法,貌似不是对所有中文有效。。
function str2asc(str){ 
return str.charCodeAt(0).toString(16); 
} 
function asc2str(str){ 
return String.fromCharCode(str); 
}
Javascript 相关文章推荐
jQuery中:input选择器用法实例
Jan 03 Javascript
JavaScript 不支持 indexof 该如何解决
Mar 30 Javascript
基于JS实现textarea中获取动态剩余字数的方法
May 25 Javascript
jQuery操作动态生成的内容的方法
May 28 Javascript
jQuery Validate验证表单时多个name相同的元素只验证第一个的解决方法
Dec 24 Javascript
jQuery无刷新上传之uploadify简单代码
Jan 17 Javascript
jQuery 实时保存页面动态添加的数据的示例
Aug 14 jQuery
集合Bootstrap自定义confirm提示效果
Sep 19 Javascript
laravel5.3 vue 实现收藏夹功能实例详解
Jan 21 Javascript
bootstrap table支持高度百分比的实例代码
Feb 28 Javascript
Vuex的actions属性的具体使用
Apr 14 Javascript
Bootstrap 时间日历插件bootstrap-datetimepicker配置与应用小结
May 28 Javascript
JAVASCRIPT车架号识别/验证函数代码 汽车车架号验证程序
Jan 08 #Javascript
人人网javascript面试题 可以提前实现下
Jan 05 #Javascript
javascript是怎么继承的介绍
Jan 05 #Javascript
js 链式延迟执行DOME
Jan 04 #Javascript
常见效果实现之返回顶部(结合淡入、淡出、减速滚动)
Jan 04 #Javascript
Textarea与懒惰渲染实现代码
Jan 04 #Javascript
js中有关IE版本检测
Jan 04 #Javascript
You might like
十天学会php之第二天
2006/10/09 PHP
一个显示效果非常不错的PHP错误、异常处理类
2014/03/21 PHP
CI框架常用方法小结
2016/05/17 PHP
完美解决phpexcel导出到xls文件出现乱码的问题
2016/10/29 PHP
js 将json字符串转换为json对象的方法解析
2013/11/13 Javascript
node.js中的emitter.on方法使用说明
2014/12/10 Javascript
《JavaScript DOM 编程艺术》读书笔记之JavaScript 简史
2015/01/09 Javascript
jquery判断复选框是否选中进行答题提示特效
2015/12/10 Javascript
javascript实现随机显示星星特效
2016/01/28 Javascript
vue项目如何刷新当前页面的方法
2018/05/18 Javascript
JavaScript对象拷贝与Object.assign用法实例分析
2018/06/20 Javascript
从零开始在NPM上发布一个Vue组件的方法步骤
2018/12/20 Javascript
JavaScript函数IIFE使用详解
2019/10/21 Javascript
vue 解决路由只变化参数页面组件不更新问题
2019/11/05 Javascript
javascript 设计模式之组合模式原理与应用详解
2020/04/08 Javascript
Node.js 中判断一个文件是否存在
2020/08/24 Javascript
JavaScript实现网页tab栏效果制作
2020/11/20 Javascript
[02:15]2014DOTA2国际邀请赛 专访LGD.lin小兔子是大腿
2014/07/14 DOTA
linux下安装easy_install的方法
2013/02/10 Python
基于python脚本实现软件的注册功能(机器码+注册码机制)
2016/10/09 Python
详解Pytorch 使用Pytorch拟合多项式(多项式回归)
2018/05/24 Python
python实现批量解析邮件并下载附件
2018/06/19 Python
python正则表达式之对号入座篇
2018/07/24 Python
python爱心表白 每天都是浪漫七夕!
2018/08/18 Python
pytorch的batch normalize使用详解
2020/01/15 Python
python add_argument()用法解析
2020/01/29 Python
Public Desire美国/加拿大:全球性的在线鞋类品牌
2018/12/17 全球购物
巴西葡萄酒商店:Divvino
2020/02/22 全球购物
毕业生个人求职的自我评价
2013/10/28 职场文书
职业女性的职业规划
2014/03/04 职场文书
协议书样本
2014/04/23 职场文书
同学聚会开幕词
2019/04/02 职场文书
Python激活Anaconda环境变量的详细步骤
2021/06/08 Python
快速学习Oracle触发器和游标
2021/06/30 Oracle
Linux安装apache服务器的配置过程
2021/11/27 Servers
Windows Server 修改远程桌面端口的实现
2022/06/25 Servers