简单明了区分escape、encodeURI和encodeURIComponent


Posted in Javascript onMay 26, 2018

一、前言

讲这3个方法区别的文章太多了,但是大部分写的都很绕。本文试图从实践角度去讲这3个方法。

二、escape和它们不是同一类

简单来说,escape是对字符串(string)进行编码(而另外两种是对URL),作用是让它们在所有电脑上可读。
编码之后的效果是%XX或者%uXXXX这种形式。
其中 ASCII字母、数字、@*/+ ,这几个字符不会被编码,其余的都会。
最关键的是,当你需要对URL编码时,请忘记这个方法,这个方法是针对字符串使用的,不适用于URL。
事实上,这个方法我还没有在实际工作中用到过,所以就不多讲了。

三、最常用的encodeURI和encodeURIComponent

对URL编码是常见的事,所以这两个方法应该是实际中要特别注意的。
它们都是编码URL,唯一区别就是编码的字符范围,其中
encodeURI方法不会对下列字符编码  ASCII字母、数字、~!@#$&*()=:/,;?+'
encodeURIComponent方法不会对下列字符编码 ASCII字母、数字、~!*()'
所以encodeURIComponent比encodeURI编码的范围更大。
实际例子来说,encodeURIComponent会把 http://  编码成  http%3A%2F%2F 而encodeURI却不会。 

四、最重要的,我该什么场合用什么方法

区别上面说的很清楚了,接下来从实际例子来说说把。

1、如果只是编码字符串,不和URL有半毛钱关系,那么用escape。
2、如果你需要编码整个URL,然后需要使用这个URL,那么用encodeURI。

比如
encodeURI("https://3water.com/season-huang/some other thing");

编码后会变为

"https://3water.com/season-huang/some%20other%20thing";

其中,空格被编码成了%20。但是如果你用了encodeURIComponent,那么结果变为

"http%3A%2F%2F3water.com%2Fseason-huang%2Fsome%20other%20thing"

看到了区别吗,连 "/" 都被编码了,整个URL已经没法用了。

3、当你需要编码URL中的参数的时候,那么encodeURIComponent是最好方法。

var param = "https://3water.com/season-huang/"; //param为参数
param = encodeURIComponent(param);
var url = "https://3water.com?next=" + param;
console.log(url) //https://3water.com?next=http%3A%2F%2F3water.com%2Fseason-huang%2F

看到了把,参数中的 "/" 可以编码,如果用encodeURI肯定要出问题,因为后面的/是需要编码的。

Javascript 相关文章推荐
Prototype PeriodicalExecuter对象 学习
Jul 19 Javascript
jquery 得到当前页面高度和宽度的两个函数
Feb 21 Javascript
别了 JavaScript中的isXX系列
Aug 01 Javascript
js获得鼠标的坐标值的方法
Mar 13 Javascript
javascript的事件触发器介绍的实现
Jun 05 Javascript
JavaScript中iframe实现局部刷新的几种方法汇总
Jan 06 Javascript
jquery遍历标签中自定义的属性方法
Sep 17 Javascript
javascript数组对象常用api函数小结(连接,插入,删除,反转,排序等)
Sep 20 Javascript
微信禁止下拉查看URL的处理方法
Sep 28 Javascript
JavaScript 禁止用户保存图片的实现代码
Apr 28 Javascript
JS禁用右键、禁用Ctrl+u、禁用Ctrl+s、禁用F12的实现代码
Dec 01 Javascript
使用js原生实现年份轮播选择效果实例
Jan 12 Javascript
页面点击小红心js实现代码
May 26 #Javascript
js input输入百分号保存数据库失败的解决方法
May 26 #Javascript
使用javascript函数编写简单银行取钱存钱流程
May 26 #Javascript
jQuery插件jsonview展示json数据
May 26 #jQuery
jQuery插件Validation表单验证详解
May 26 #jQuery
jQuery创建及操作xml格式数据示例
May 26 #jQuery
JavaScript数组,JSON对象实现动态添加、修改、删除功能示例
May 26 #Javascript
You might like
PHP4在WinXP下IIS和Apache2服务器上的安装实例
2006/10/09 PHP
PHP 全角转半角实现代码
2010/05/16 PHP
深入Nginx + PHP 缓存详解
2013/07/11 PHP
PHP封装CURL扩展类实例
2015/07/28 PHP
PHP通过反射动态加载第三方类和获得类源码的实例
2015/11/27 PHP
PHP+MySQL统计该库中每个表的记录数并按递减顺序排列的方法
2016/02/15 PHP
PHP7修改的函数
2021/03/09 PHP
JQuery分别取得每行最后一列和最后一行的示例代码
2013/08/18 Javascript
javascript unicode与GBK2312(中文)编码转换方法
2013/11/14 Javascript
Jquery原生态实现表格header头随滚动条滚动而滚动
2014/03/18 Javascript
node.js中的fs.lstat方法使用说明
2014/12/16 Javascript
理解AngularJs指令
2015/12/10 Javascript
百度地图给map添加右键菜单(判断是否为marker)
2016/03/04 Javascript
vue.js 表格分页ajax 异步加载数据
2016/10/18 Javascript
浅谈webpack组织模块的原理
2018/03/10 Javascript
vue+VeeValidate 校验范围实例详解(部分校验,全部校验)
2018/10/19 Javascript
在vue中使用axios实现post方式获取二进制流下载文件(实例代码)
2019/12/16 Javascript
JavaScript简单编程实例学习
2020/02/14 Javascript
[49:15]DOTA2-DPC中国联赛 正赛 CDEC vs XG BO3 第二场 1月19日
2021/03/11 DOTA
Python 字符串中的字符倒转
2008/09/06 Python
Python中统计函数运行耗时的方法
2015/05/05 Python
apache部署python程序出现503错误的解决方法
2017/07/24 Python
Python快速排序算法实例分析
2017/11/29 Python
matplotlib 纵坐标轴显示数据值的实例
2018/05/25 Python
Python向excel中写入数据的方法
2019/05/05 Python
pyqt 实现为长内容添加滑轮 scrollArea
2019/06/19 Python
详解python中自定义超时异常的几种方法
2019/07/29 Python
django创建最简单HTML页面跳转方法
2019/08/16 Python
使用OpenCV校准鱼眼镜头的方法
2020/11/26 Python
python中编写函数并调用的知识点总结
2021/01/13 Python
澳大利亚药房在线:ThePharmacy
2017/10/04 全球购物
建筑工程管理专业自荐信范文
2013/12/28 职场文书
《三个小伙伴》教学反思
2014/04/11 职场文书
校长个人总结
2015/03/03 职场文书
openstack中的rpc远程调用的方法
2021/07/09 Python
聊聊mysql都有哪几种分区方式
2022/04/13 MySQL