简单明了区分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下的26个实用小技巧(jQuery tips, tricks & solutions)
Mar 01 Javascript
js的表单操作 简单计算器
Dec 29 Javascript
jQuery中Ajax的load方法详解
Jan 14 Javascript
用svg制作富有动态的tooltip
Jul 17 Javascript
如何用js实现鼠标向上滚动时浮动导航
Jul 18 Javascript
使用Angular缓存父页面数据的方法
Jan 03 Javascript
JS对象与JSON互转换、New Function()、 forEach()、DOM事件流等js开发基础小结
Aug 10 Javascript
详解React-Native全球化多语言切换工具库react-native-i18n
Nov 03 Javascript
vue2.0 根据状态值进行样式的改变展示方法
Mar 13 Javascript
微信jssdk逻辑在vue中的运用详解
Nov 14 Javascript
vue单页应用的内存泄露定位和修复问题小结
Aug 02 Javascript
微信小程序实现多图上传
Jun 19 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
在 PHP 中使用随机数的三个步骤
2006/10/09 PHP
php实现mysql同步的实现方法
2009/10/21 PHP
在WAMP环境下搭建ZendDebugger php调试工具的方法
2011/07/18 PHP
PHP管理内存函数 memory_get_usage()使用介绍
2012/09/23 PHP
PHP文件读写操作相关函数总结
2014/11/18 PHP
PHP自定义函数格式化json数据示例
2016/09/14 PHP
客户端脚本中常常出现的一些问题和调试技巧
2007/01/09 Javascript
URL地址中的#符号使用说明
2011/02/12 Javascript
高效的获取当前元素是父元素的第几个子元素
2013/10/15 Javascript
使用GruntJS构建Web程序之安装篇
2014/06/04 Javascript
jQuery插件imgAreaSelect基础讲解
2017/05/26 jQuery
nodeJS实现路由功能实例代码
2017/06/08 NodeJs
基于JS对象创建常用方式及原理分析
2017/06/28 Javascript
浅谈Vue 初始化性能优化
2017/08/31 Javascript
详解Vue + Vuex 如何使用 vm.$nextTick
2017/11/20 Javascript
js闭包学习心得总结
2018/04/17 Javascript
JS 使用 window对象的print方法实现分页打印功能
2018/05/16 Javascript
解决包含在label标签下的checkbox在ie8及以下版本点击事件无效果兼容的问题
2019/10/27 Javascript
在vue+element ui框架里实现lodash的debounce防抖
2019/11/13 Javascript
vue相关配置文件详解及多环境配置详细步骤
2020/05/19 Javascript
vue项目在线上服务器访问失败原因分析
2020/08/14 Javascript
JavaScript实现京东快递单号查询
2020/11/30 Javascript
小程序中手机号识别的示例
2020/12/14 Javascript
使用Python进行目录的对比方法
2018/11/01 Python
python实现代码统计器
2019/09/19 Python
python的slice notation的特殊用法详解
2019/12/27 Python
详谈tensorflow gfile文件的用法
2020/02/05 Python
python对指定字符串逆序的6种方法(小结)
2020/04/02 Python
python实现三种随机请求头方式
2021/01/05 Python
H5离线存储Manifest原理及使用
2020/04/28 HTML / CSS
美国校园市场:OCM
2017/06/08 全球购物
美国最大的家庭鞋类零售商之一:Shoe Carnival
2017/10/06 全球购物
奥兰多迪士尼门票折扣:Undercover Tourist
2018/07/09 全球购物
后勤岗位职责
2013/11/26 职场文书
国家助学金获奖感言
2014/01/31 职场文书
和谐社区口号
2014/06/19 职场文书