谈谈encodeURI和encodeURIComponent以及escape的区别与应用


Posted in Javascript onNovember 24, 2015

首先,我们都知道这三个东西都是用来编码的先来说encodeURI()和encodeURIComponent(),这两个是在转换url时候用来编码解码用的。

有编码就会有解码,解码就是decodeURI()和decodeURIComponent(),他们的用法很简单,在参数中带入要转码的文字就可实现目的

如:

encodeURI("我是要编码的文字")

decodeURI("我是要解码的文字")

encodeURIComponent("我是要编码的文字")

decodeURIComponent("我是要解码的文字")

而encodeURI()和encodeURIComponent()的区别其实并不大

主要区别在于:

encodeURI不编码字符有82个:!,#,$,&,',(,),*,+,,,-,.,/,:,;,=,?,@,_,~,0-9,a-z,A-Z

encodeURIComponent不编码字符有71个:!, ',(,),*,-,.,_,~,0-9,a-z,A-Z

encodeURI主要用于直接赋值给地址栏时候:

location.href=encodeURI("http://www.cnblogs.com/Tezml/");

而encodeURIComponent主要用于url的query参数:

location.href="http://www.cnblogs.com/Tezml/test.php?a="+encodeURIComponent("我就是我"); 

而escape,相比于上面那两个,就有所不同了

escape()是编码,unescape()是解码

escape 方法

对 String 对象编码以便它们能在所有计算机上可读,

escape(charString)

必选项 charstring 参数是要编码的任意 String 对象或文字。

说明

escape 方法返回一个包含了 charstring 内容的字符串值( Unicode 格式)。所有空格、标点、重音符号以及其他非 ASCII 字符都用 %xx 编码代替,

其中 xx 等于表示该字符的十六进制数。例如,空格返回的是 "%20" 。

字符值大于 255 的以 %uxxxx 格式存储。

escape不编码字符有69个:*,+,-,.,/,@,_,0-9,a-z,A-Z

注意   escape 方法不能够用来对统一资源标示码 (URI) 进行编码。对其编码应使用 encodeURI 和encodeURIComponent 方法。

最后上一段关于编码解码的demo

<!DOCTYPE html>
<html>
 <head>
 <title>Tezml_编码解码测试</title>
 <meta charset="utf-8">
 <meta name="author" content="Tezml" />
 <meta name="copyright" content="Tezml" />
 <meta name="description" content="Tezml" />
 <script type="text/javascript" src="http://cdn.bootcss.com/jquery/1.11.2/jquery.min.js"></script>
</head>
<body>
<div id="wz1"></div>
<div id="wz2"></div>
<div id="wz3"></div>
<div id="wz4"></div>
<div id="wz5"></div>
<div id="wz6"></div>
<div id="wz7"></div>
<div id="wz8"></div>
<div id="wz9"></div>
<div id="wz10"></div>
<div id="wz11"></div>
<div id="wz12"></div>
</body>
<script type="text/javascript">
var chinese="请叫我中文"
var english="place tall me englash"
var Monster=":#&$/@"
$("#wz1").html(encodeURI(chinese))//编码 %E8%AF%B7%E5%8F%AB%E6%88%91%E4%B8%AD%E6%96%87
$("#wz2").html(decodeURI(chinese))//解码 请叫我中文
$("#wz3").html(encodeURI(english))//编码 place%20tall%20me%20englash
$("#wz4").html(decodeURI(english))//解码 place tall me englash
$("#wz5").html(encodeURIComponent(Monster))//编码 %3A%23%26%24%2F%40
$("#wz6").html(encodeURI(Monster))//编码 :#&$/@
$("#wz7").html(escape(chinese))//编码 %u8BF7%u53EB%u6211%u4E2D%u6587
$("#wz8").html(escape(english))//编码 place%20tall%20me%20englash
$("#wz9").html(escape(Monster))//编码 %3A%23%26%24/@
$("#wz10").html(unescape(chinese))//编码 请叫我中文
$("#wz11").html(unescape(english))//编码 place tall me englash
$("#wz12").html(unescape(Monster))//编码 :#&$/@
</script>
</html>

总结

escape()不能直接用于URL编码,它的真正作用是返回一个字符的Unicode编码值。比如"春节"的返回结果是%u6625%u8282,,escape()不对"+"编码 主要用于汉字编码,现在已经不提倡使用。

encodeURI()是Javascript中真正用来对URL编码的函数。 编码整个url地址,但对特殊含义的符号"; / ? : @ & = + $ , #",也不进行编码。对应的解码函数是:decodeURI()。

encodeURIComponent() 能编码"; / ? : @ & = + $ , #"这些特殊字符。对应的解码函数是decodeURIComponent()。

假如要传递带&符号的网址,所以用encodeURIComponent()

Javascript 相关文章推荐
javascript当中的代码嗅探扩展原生对象和原型(prototype)
Jan 11 Javascript
jQuery实现菜单式图片滑动切换
Mar 14 Javascript
详解JavaScript基于面向对象之继承实例
Dec 16 Javascript
深入理解jquery跨域请求方法
May 18 Javascript
JS Ajax请求如何防止重复提交
Jun 13 Javascript
移动端使用localResizeIMG4压缩图片
Apr 22 Javascript
给Easyui-Datebox设置隐藏或者不可用的解决方法
May 26 Javascript
vue中element组件样式修改无效的解决方法
Feb 03 Javascript
Express的HTTP重定向到HTTPS的方法
Jun 06 Javascript
使用JavaScript解析URL的方法示例
Mar 01 Javascript
JavaScript实现图片轮播特效
Oct 23 Javascript
Vue通过getAction的finally来最大程度避免影响主数据呈现问题
Apr 24 Javascript
javascript实现加载xml文件的方法
Nov 24 #Javascript
jQuery 1.9.1源码分析系列(十)事件系统之主动触发事件和模拟冒泡处理
Nov 24 #Javascript
JavaScript转换与解析JSON方法实例详解
Nov 24 #Javascript
jQuery实现带分组数据的Table表头排序实例分析
Nov 24 #Javascript
JS数组排序技巧汇总(冒泡、sort、快速、希尔等排序)
Nov 24 #Javascript
JS获取数组最大值、最小值及长度的方法
Nov 24 #Javascript
基于jquery实现日历签到功能
Sep 11 #Javascript
You might like
Zend的MVC机制使用分析(一)
2013/05/02 PHP
鸡肋的PHP单例模式应用详解
2013/06/03 PHP
PHP CodeBase:将时间显示为&quot;刚刚&quot;&quot;n分钟/小时前&quot;的方法详解
2013/06/06 PHP
php获取文件大小的方法
2014/02/26 PHP
PHP清除数组中所有字符串两端空格的方法
2014/10/20 PHP
Laravel5权限管理方法详解
2016/07/26 PHP
自写的利用PDO对mysql数据库增删改查操作类
2018/02/19 PHP
jQuery学习笔记之jQuery选择器的使用
2010/12/22 Javascript
一行代码告别document.getElementById
2012/06/01 Javascript
js获得地址栏?问号后参数的方法
2013/08/08 Javascript
非jQuery实现照片散落桌子上,单击放大的LightBox效果
2014/11/28 Javascript
jQuery获取标签文本内容和html内容的方法
2015/03/27 Javascript
jquery判断当前浏览器的实现代码
2015/11/07 Javascript
学习JavaScript设计模式(接口)
2015/11/26 Javascript
JSON 必知必会 观后记
2016/10/27 Javascript
js cookie实现记住密码功能
2017/01/17 Javascript
JavaScript禁止微信浏览器下拉回弹效果
2017/05/16 Javascript
解决layer.msg 不居中 ifram中的问题
2019/09/05 Javascript
[01:14:34]DOTA2上海特级锦标赛C组资格赛#2 LGD VS Newbee第一局
2016/02/28 DOTA
Python中自定义函数的教程
2015/04/27 Python
python函数局部变量用法实例分析
2015/08/04 Python
Python装饰器基础详解
2016/03/09 Python
python生成随机图形验证码详解
2017/11/08 Python
利用python3随机生成中文字符的实现方法
2017/11/24 Python
Python实现矩阵加法和乘法的方法分析
2017/12/19 Python
基于随机梯度下降的矩阵分解推荐算法(python)
2018/08/31 Python
Python 数据库操作 SQLAlchemy的示例代码
2019/02/18 Python
PyTorch基本数据类型(一)
2019/05/22 Python
详解Python Opencv和PIL读取图像文件的差别
2019/12/27 Python
HTML5 File API改善网页上传功能
2009/08/19 HTML / CSS
国外平面设计第一市场:99designs
2016/10/25 全球购物
香港百佳网上超级市场:PARKNSHOP.com
2020/06/10 全球购物
升职自荐书范文
2013/11/28 职场文书
2015教师见习期工作总结
2014/12/12 职场文书
幼儿园中秋节活动总结
2015/03/23 职场文书
导游词之重庆渣滓洞
2020/01/08 职场文书