关于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 相关文章推荐
利用js跨页面保存变量做菜单的方法
Jan 17 Javascript
把input初始值不写value的具体实现方法
Jul 04 Javascript
asp.net刷新本页面的六种方法总结
Jan 07 Javascript
利用js制作html table分页示例(js实现分页)
Apr 25 Javascript
javascript每日必学之多态
Feb 23 Javascript
jQuery监听文件上传实现进度条效果的方法
Oct 16 Javascript
浅谈ES6新增的数组方法和对象
Aug 08 Javascript
vue.js 实现输入框动态添加功能
Jun 25 Javascript
详解vue通过NGINX部署在子目录或者二级目录实践
Sep 03 Javascript
Vue.js 事件修饰符的使用教程
Nov 01 Javascript
JQuery的加载和选择器用法简单示例
May 13 jQuery
谈谈JavaScript令人迷惑的==与+
Aug 31 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生成不同颜色、不同大小的tag标签函数
2013/09/23 PHP
php实现的中秋博饼游戏之掷骰子并输出结果功能详解
2017/11/06 PHP
laravel 解决groupBy时出现的错误 isn't in Group By问题
2019/10/17 PHP
PHP中用Trait封装单例模式的实现
2019/12/18 PHP
javascript实现可全选、反选及删除表格的方法
2015/05/15 Javascript
浅谈jquery的map()和each()方法
2016/06/12 Javascript
jQuery.ajax 跨域请求webapi设置headers的解决方案
2016/08/08 Javascript
jquery动态创建div与input的实例代码
2016/10/12 Javascript
JavaScript重定向URL参数的两种方法小结
2016/10/19 Javascript
Bootstrap框架实现广告轮播效果
2016/11/28 Javascript
javascript 数组去重复(在线去重工具)
2016/12/17 Javascript
Web 开发中Ajax的Session 超时处理方法
2017/01/19 Javascript
提升node.js中使用redis的性能遇到的问题及解决方法
2018/10/30 Javascript
深入理解使用Vue实现Context-Menu的思考与总结
2019/03/09 Javascript
详解使用Nuxt.js快速搭建服务端渲染(SSR)应用
2019/03/13 Javascript
node事件循环和process模块实例分析
2020/02/14 Javascript
Node.js API详解之 zlib模块用法分析
2020/05/19 Javascript
vue如何使用外部特殊字体的操作
2020/07/30 Javascript
Python合并多个装饰器小技巧
2015/04/28 Python
Python WXPY实现微信监控报警功能的代码
2017/10/20 Python
python机器学习理论与实战(五)支持向量机
2018/01/19 Python
Tensorflow 实现释放内存
2020/02/03 Python
查看jupyter notebook每个单元格运行时间实例
2020/04/22 Python
关于matplotlib-legend 位置属性 loc 使用说明
2020/05/16 Python
django filter过滤器实现显示某个类型指定字段不同值方式
2020/07/16 Python
总结Pyinstaller的坑及终极解决方法(小结)
2020/09/21 Python
业务主管岗位职责
2013/11/20 职场文书
团员的自我评价
2013/12/01 职场文书
《狐假虎威》教学反思
2014/02/07 职场文书
企业法人授权委托书
2014/04/03 职场文书
计算机求职自荐信范文
2014/04/19 职场文书
月度优秀员工获奖感言
2014/08/16 职场文书
诉讼代理人授权委托书
2014/10/11 职场文书
2015年宣传部部长竞选演讲稿
2014/11/28 职场文书
反邪教警示教育活动总结
2015/05/09 职场文书
MySQL磁盘碎片整理实例演示
2022/04/03 MySQL