关于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 相关文章推荐
如何在JavaScript中实现私有属性的写类方式(二)
Dec 04 Javascript
js图片实时加载提供网页打开速度
Sep 11 Javascript
浅谈JS运算符&amp;&amp;和|| 及其优先级
Aug 10 Javascript
Bootstrap 源代码分析(未完待续)
Aug 17 Javascript
jquery设置css样式的多种方法(总结)
Feb 21 Javascript
JS 中LocalStorage和SessionStorage的使用
Aug 17 Javascript
利用js给datalist或select动态添加option选项的方法
Jan 25 Javascript
详解基于Vue cli生成的Vue项目的webpack4升级
Jun 19 Javascript
详解jquery和vue对比
Apr 16 jQuery
bootstrap 日期控件 datepicker被弹出框dialog覆盖的解决办法
Jul 09 Javascript
Layui动态生成select下拉选择框不显示的解决方法
Sep 24 Javascript
vue实现div可拖动位置也可改变盒子大小的原理
Sep 16 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
支持oicq头像的留言簿(二)
2006/10/09 PHP
php class中self,parent,this的区别以及实例介绍
2013/04/24 PHP
详解WordPress中过滤链接与过滤SQL语句的方法
2015/12/18 PHP
thinkphp实现附件上传功能
2017/05/26 PHP
jQuery的实现原理的模拟代码 -4 重要的扩展函数 extend
2010/08/03 Javascript
深入理解JavaScript定时机制
2010/10/29 Javascript
JS.GetAllChild(element,deep,condition)使用介绍
2013/09/21 Javascript
javascript实现的HashMap类代码
2014/06/27 Javascript
js用Date对象的setDate()函数对日期进行加减操作
2014/09/18 Javascript
老生常谈javascript的面向对象思想
2017/08/22 Javascript
vue打包后显示空白正确处理方法
2017/11/01 Javascript
实现单层json按照key字母顺序排序的示例
2017/12/06 Javascript
vue init webpack myproject构建项目 ip不能访问的解决方法
2018/03/20 Javascript
vue 中滚动条始终定位在底部的方法
2018/09/03 Javascript
JS用最简单的方法实现四舍五入
2019/08/27 Javascript
vue中后端做Excel导出功能返回数据流前端的处理操作
2020/09/08 Javascript
vue动态合并单元格并添加小计合计功能示例
2020/11/26 Vue.js
利用JavaScript模拟京东按键输入功能
2020/12/01 Javascript
[01:34]2014DOTA2展望TI 剑指西雅图VG战队专访
2014/06/30 DOTA
Tensorflow之构建自己的图片数据集TFrecords的方法
2018/02/07 Python
Python文件路径名的操作方法
2019/10/30 Python
python3让print输出不换行的方法
2020/08/24 Python
美国彩妆品牌:Coastal Scents
2017/04/01 全球购物
纽约和芝加哥当天送花:Ode à la Rose
2019/07/05 全球购物
bonprix匈牙利:女士、男士和儿童服装
2019/07/19 全球购物
面试后的感谢信范文
2014/02/01 职场文书
军训自我鉴定怎么写
2014/02/13 职场文书
2014植树节活动总结
2014/03/11 职场文书
中国梦演讲稿3分钟
2014/08/19 职场文书
前台岗位职责
2015/02/13 职场文书
2015年学生会个人工作总结
2015/04/09 职场文书
2015年妇委会工作总结
2015/05/22 职场文书
2016年公司“3.12”植树节活动总结
2016/03/16 职场文书
创业计划书之冷饮店
2019/09/27 职场文书
Html5获取用户当前位置的几种方式
2022/01/18 HTML / CSS
德劲DE1102数字调谐收音机机评
2022/04/07 无线电