简单明了区分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 相关文章推荐
javascript window对象属性整理
Oct 24 Javascript
jquery实现的鼠标下拉滚动置顶效果
Jul 24 Javascript
jQuery实现带有洗牌效果的动画分页实例
Aug 31 Javascript
js判断文本框输入的内容是否为数字
Dec 23 Javascript
JavaScript省市区三级联动菜单效果
Sep 21 Javascript
如何实现星星评价(jquery.raty.js插件)
Dec 21 Javascript
vue.js删除列表中的一行
Jun 30 Javascript
javascript移动端 电子书 翻页效果实现代码
Sep 07 Javascript
ant design vue 表格table 默认勾选几项的操作
Oct 31 Javascript
微信小程序实现倒计时功能
Nov 19 Javascript
记录一次websocket封装的过程
Nov 23 Javascript
vue 使用 sortable 实现 el-table 拖拽排序功能
Dec 26 Vue.js
页面点击小红心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
php异步多线程swoole用法实例
2014/11/14 PHP
PHP内存缓存Memcached类实例
2014/12/08 PHP
讲解WordPress中用于获取评论模板和搜索表单的PHP函数
2015/12/28 PHP
Bootstrap+PHP实现多图上传功能实例详解
2018/04/08 PHP
基于jquery的多功能软键盘插件
2012/07/25 Javascript
js如何设置在iframe框架中指定div不显示
2013/12/04 Javascript
javascript中直接引用Microsoft的COM生成Word
2014/01/20 Javascript
NodeJS学习笔记之FS文件模块
2015/01/13 NodeJs
jquery单击事件和双击事件冲突解决方案
2016/03/02 Javascript
Jquery attr()方法 属性赋值和属性获取详解
2016/04/15 Javascript
浅谈Node.js:Buffer模块
2016/12/05 Javascript
JavaScript中闭包的详解
2017/04/01 Javascript
Angular4学习笔记之准备和环境搭建项目
2017/08/01 Javascript
bootstrap-table实现表头固定以及列固定的方法示例
2019/03/07 Javascript
js中offset,client , scroll 三大元素知识点总结
2019/09/11 Javascript
原生JavaScript写出Tabs标签页的实例代码
2020/07/20 Javascript
python使用rabbitmq实现网络爬虫示例
2014/02/20 Python
python求解水仙花数的方法
2015/05/11 Python
PyCharm使用教程之搭建Python开发环境
2016/06/07 Python
视觉直观感受若干常用排序算法
2017/04/13 Python
Python读取sqlite数据库文件的方法分析
2017/08/07 Python
python的staticmethod与classmethod实现实例代码
2018/02/11 Python
Python小工具之消耗系统指定大小内存的方法
2018/12/03 Python
python增加图像对比度的方法
2019/07/12 Python
python爬取盘搜的有效链接实现代码
2019/07/20 Python
python爬虫模块URL管理器模块用法解析
2020/02/03 Python
北美最大的手工艺品零售商之一:Michaels Stores
2019/02/27 全球购物
Charles & Keith欧盟:新加坡时尚品牌
2019/08/01 全球购物
创意爱尔兰礼物:Creative Irish Gifts
2020/01/29 全球购物
马德里运动鞋商店:Nigra Mercato
2020/02/16 全球购物
班主任工作经验材料
2014/02/02 职场文书
三月法制宣传月活动总结
2014/07/03 职场文书
《1942》观后感
2015/06/08 职场文书
幼儿园心得体会范文
2016/01/21 职场文书
Python NumPy灰度图像的压缩原理讲解
2021/08/04 Python
台积电称即便经济低迷也没有降价的计划
2022/04/21 数码科技