简单明了区分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 相关文章推荐
js对table的td进行相同内容合并示例详解
Dec 27 Javascript
对象题目的一个坑 理解Javascript对象
Dec 22 Javascript
IE和Firefox之间在JavaScript语法上的差异
Apr 22 Javascript
js浏览器滚动条卷去的高度scrolltop(实例讲解)
Jul 07 Javascript
node通过npm写一个cli命令行工具
Oct 12 Javascript
vue+swiper实现组件化开发的实例代码
Oct 26 Javascript
JS实现的缓冲运动效果示例
Apr 30 Javascript
JavaScript实现简单音乐播放器
Apr 17 Javascript
vue-cli3跨域配置的简单方法
Sep 06 Javascript
Vue使用JSEncrypt实现rsa加密及挂载方法
Feb 07 Javascript
JS 设计模式之:单例模式定义与实现方法浅析
May 06 Javascript
前端监听websocket消息并实时弹出(实例代码)
Nov 27 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实现类似于C语言的文件读取及解析功能
2017/09/01 PHP
收藏一些不常用,但是有用的代码
2007/03/12 Javascript
利用jQuery接受和处理xml数据的代码(.net)
2011/03/28 Javascript
使用js完成节点的增删改复制等的操作
2014/01/02 Javascript
JavaScript DOM事件(笔记)
2015/04/08 Javascript
js 单引号替换成双引号,双引号替换成单引号的实现方法
2017/02/16 Javascript
详解webpack介绍&安装&常用命令
2017/06/29 Javascript
vue2.x 父组件监听子组件事件并传回信息的方法
2017/07/17 Javascript
微信小程序实现分享朋友圈的图片功能示例
2019/01/18 Javascript
JS原生瀑布流效果实现
2019/04/26 Javascript
Element-UI+Vue模式使用总结
2020/01/02 Javascript
js中复选框的取值及赋值示例详解
2020/10/18 Javascript
js实现限定范围拖拽的示例
2020/10/26 Javascript
Python内置函数的用法实例教程
2014/09/08 Python
使用Python编写简单网络爬虫抓取视频下载资源
2014/11/04 Python
Python os模块学习笔记
2015/06/21 Python
Python使用pip安装报错:is not a supported wheel on this platform的解决方法
2018/01/23 Python
Python+tkinter使用40行代码实现计算器功能
2018/01/30 Python
Python基于win32ui模块创建弹出式菜单示例
2018/05/09 Python
python面向对象实现名片管理系统文件版
2019/04/26 Python
python Jupyter运行时间实例过程解析
2019/12/13 Python
浅析Python数字类型和字符串类型的内置方法
2019/12/22 Python
opencv之为图像添加边界的方法示例
2019/12/26 Python
Python利用命名空间解析XML文档
2020/08/10 Python
python动态规划算法实例详解
2020/11/22 Python
学前班教师的自我鉴定
2013/12/05 职场文书
机电一体化职业规划书
2014/01/07 职场文书
励志演讲稿3分钟
2014/08/21 职场文书
不听老师话的万能检讨书
2014/10/04 职场文书
2015年教学工作总结
2015/04/02 职场文书
有关骆驼祥子的读书笔记
2015/06/26 职场文书
2015年国庆节广播稿
2015/08/19 职场文书
给学校的建议书400字
2015/09/14 职场文书
小学英语教师2015年度个人工作总结
2015/10/14 职场文书
go语言中json数据的读取和写出操作
2021/04/28 Golang
Oracle中日期的使用方法实例
2022/07/07 Oracle