简单明了区分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 相关文章推荐
基于jquery的checkbox下拉框插件代码
Jun 25 Javascript
在javascript中如何得到中英文混合字符串的长度
Jan 17 Javascript
JS控制伪元素的方法汇总
Apr 06 Javascript
jQuery事件的绑定、触发、及监听方法简单说明
May 10 Javascript
原生js和jquery分别实现横向导航菜单效果
May 13 Javascript
javascript如何创建对象
Aug 29 Javascript
Vue.js每天必学之表单控件绑定
Sep 05 Javascript
Vue.js数据绑定之data属性
Jul 07 Javascript
微信小程序中button组件的边框设置的实例详解
Sep 27 Javascript
JS实现判断图片是否加载完成的方法分析
Jul 31 Javascript
vue data引入本地图片的两种方式小结
Nov 13 Javascript
使用webpack搭建pixi.js开发环境
Feb 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
星际争霸中的热键
2020/03/04 星际争霸
mysql 全文搜索 技巧
2007/04/27 PHP
php的urlencode()URL编码函数浅析
2011/08/09 PHP
JpGraph php柱状图使用介绍
2011/08/23 PHP
PHP与javascript实现变量交互的示例代码
2013/07/23 PHP
Zend Framework教程之Loader以及PluginLoader用法详解
2016/03/09 PHP
PHP 数组基本操作小结(推荐)
2016/06/13 PHP
php curl简单采集图片生成base64编码(并附curl函数参数说明)
2019/02/15 PHP
Centos7安装swoole扩展操作示例
2020/03/26 PHP
使用js实现一个可编辑的select下拉列表
2014/02/20 Javascript
js实现从数组里随机获取元素
2015/01/12 Javascript
js实现点击文本框显示日期选择器特效代码分享
2020/05/21 Javascript
Bootstrap Paginator分页插件与ajax相结合实现动态无刷新分页效果
2016/05/27 Javascript
详解Node.js:events事件模块
2016/11/24 Javascript
JavaScript使用原型和原型链实现对象继承的方法详解
2017/04/05 Javascript
JS写谷歌浏览器chrome的外挂实例
2018/01/11 Javascript
jQuery实现浏览器之间跳转并传递参数功能【支持中文字符】
2018/03/28 jQuery
Vuex 单状态库与多模块状态库详解
2018/12/11 Javascript
js 计算图片内点个数的示例代码
2019/04/04 Javascript
微信小程序云开发之云函数详解
2019/05/16 Javascript
elementUI select组件使用及注意事项详解
2019/05/29 Javascript
ES6扩展运算符和rest运算符用法实例分析
2020/05/23 Javascript
vue setInterval 定时器失效的解决方式
2020/07/30 Javascript
python抓取网页时字符集转换问题处理方案分享
2014/06/19 Python
将Python代码嵌入C++程序进行编写的实例
2015/07/31 Python
python中的lambda表达式用法详解
2016/06/22 Python
【Python】Python的urllib模块、urllib2模块批量进行网页下载文件
2016/11/19 Python
Python中qutip用法示例详解
2020/10/02 Python
简约控的天堂:The Undone
2016/12/21 全球购物
SteelSeries赛睿官网:游戏外设和配件的领先制造商(耳机、键盘、鼠标和鼠标垫)
2018/06/17 全球购物
电影T恤、80年代T恤和80年代服装:TV Store Online
2020/01/05 全球购物
Java中实现多态的机制是什么?
2014/12/07 面试题
2014全国两会大学生学习心得体会
2014/03/10 职场文书
副主任竞聘演讲稿
2014/08/18 职场文书
2015年支教教师工作总结
2015/07/22 职场文书
python基础之停用词过滤详解
2021/04/21 Python