简单明了区分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 相关文章推荐
根据鼠标的位置动态的控制层的位置
Nov 24 Javascript
兼容FF和IE的动态table示例自写
Oct 21 Javascript
js浮点数保留两位小数点示例代码(四舍五入)
Dec 26 Javascript
IE浏览器IFrame对象内存不释放问题解决方法
Aug 22 Javascript
Javascript基础_简单比较undefined和null 值
Jun 14 Javascript
smartupload实现文件上传时获取表单数据(推荐)
Dec 12 Javascript
jQuery实现select模糊查询(反射机制)
Jan 14 Javascript
js和jquery中获取非行间样式
May 05 jQuery
对象不支持indexOf属性或方法的解决方法(必看)
May 28 Javascript
vue父子组件通信的高级用法示例
Aug 29 Javascript
layui的布局和表格的渲染以及动态生成表格的方法
Sep 18 Javascript
jquery实现拖拽添加元素功能
Dec 01 jQuery
页面点击小红心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计算页面执行时间的实现代码
2013/06/18 PHP
php一次性删除前台checkbox多选内容的方法
2013/09/22 PHP
php保存信息到当前Session的方法
2015/03/16 PHP
phpstudy2018升级MySQL5.5为5.7教程(图文)
2018/10/24 PHP
php7新特性的理解和比较总结
2019/04/14 PHP
JavaScript学习笔记之JS事件对象
2015/01/22 Javascript
jquery实现适用于门户站的导航下拉菜单效果代码
2015/08/24 Javascript
理解JavaScript表单的基础知识
2016/01/25 Javascript
JS验证input输入框(字母,数字,符号,中文)
2017/03/23 Javascript
详解Webpack + ES6 最新环境搭建与配置
2018/06/04 Javascript
layui实现文件或图片上传记录
2018/08/28 Javascript
优雅的将ElementUI表格变身成树形表格的方法步骤
2019/04/11 Javascript
微信小程序image图片加载完成监听
2019/08/31 Javascript
微信小程序实现搜索框功能及踩过的坑
2020/06/19 Javascript
推荐下python/ironpython:从入门到精通
2007/10/02 Python
Python socket编程实例详解
2015/05/27 Python
深入解析Python中的集合类型操作符
2015/08/19 Python
在PyCharm导航区中打开多个Project的关闭方法
2019/01/17 Python
Django配置文件代码说明
2019/12/04 Python
Python模块的制作方法实例分析
2019/12/21 Python
PyPDF2读取PDF文件内容保存到本地TXT实例
2020/05/12 Python
Python如何读写CSV文件
2020/08/13 Python
Scrapy项目实战之爬取某社区用户详情
2020/09/17 Python
python 还原梯度下降算法实现一维线性回归
2020/10/22 Python
matplotlib之pyplot模块之标题(title()和suptitle())
2021/02/22 Python
canvas 绘图时位置偏离的问题解决
2020/09/16 HTML / CSS
韩国现代百货官网:Hmall
2018/03/21 全球购物
银行介绍信范文
2014/01/10 职场文书
趣味运动会策划方案
2014/06/02 职场文书
责任书范本
2014/08/25 职场文书
2014年语文教学工作总结
2014/12/17 职场文书
小学班级标语口号大全
2015/12/26 职场文书
学习弘扬焦裕禄精神心得体会
2016/01/23 职场文书
详解CSS玩转图片Base64编码
2021/05/25 HTML / CSS
MySQL分区以及建索引的方法总结
2022/04/13 MySQL
基于CSS制作创意端午节专属加载特效
2022/06/01 HTML / CSS