深入分析escape()、encodeURI()、encodeURIComponent()的区别及示例


Posted in Javascript onAugust 04, 2014

JavaScript中有三个可以对字符串编码的函数,分别是: escape,encodeURI,encodeURIComponent,相应3个解码函数:unescape, decodeURI, decodeURIComponent 。

下面简单介绍一下它们的区别:

1 escape()函数

定义和用法

escape() 函数可对字符串进行编码,这样就可以在所有的计算机上读取该字符串。

语法

escape(string)

参数  描述

string  必需。要被转义或编码的字符串。

返回值

已编码的 string 的副本。其中某些字符被替换成了十六进制的转义序列。

说明

该方法不会对 ASCII 字母和数字进行编码,也不会对下面这些 ASCII 标点符号进行编码: - _ . ! ~ * ' ( ) 。其他所有的字符都会被转义序列替换。

2 encodeURI()函数

定义和用法

encodeURI() 函数可把字符串作为 URI 进行编码。

语法

encodeURI(URIstring)

参数  描述

URIstring  必需。一个字符串,含有 URI 或其他要编码的文本。

返回值

URIstring 的副本,其中的某些字符将被十六进制的转义序列进行替换。

说明

该方法不会对 ASCII 字母和数字进行编码,也不会对这些 ASCII 标点符号进行编码: - _ . ! ~ * ' ( ) 。

该方法的目的是对 URI 进行完整的编码,因此对以下在 URI 中具有特殊含义的 ASCII 标点符号,encodeURI() 函数是不会进行转义的:;/?:@&=+$,#

3 encodeURIComponent() 函数

定义和用法

encodeURIComponent() 函数可把字符串作为 URI 组件进行编码。

语法

encodeURIComponent(URIstring)

参数  描述

URIstring  必需。一个字符串,含有 URI 组件或其他要编码的文本。

返回值

URIstring 的副本,其中的某些字符将被十六进制的转义序列进行替换。

说明

该方法不会对 ASCII 字母和数字进行编码,也不会对这些 ASCII 标点符号进行编码: - _ . ! ~ * ' ( ) 。

其他字符(比如 :;/?:@&=+$,# 这些用于分隔 URI 组件的标点符号),都是由一个或多个十六进制的转义序列替换的。

提示和注释

提示:请注意 encodeURIComponent() 函数 与 encodeURI() 函数的区别之处,前者假定它的参数是 URI的一部分(比如协议、主机名、路径或查询字符串)。因此 encodeURIComponent() 函数将转义用于分隔 URI 各个部分的标点符号。

4 总结:

通过对三个函数的分析,我们可以知道:escape()除了 ASCII字母、数字和特定的符号外,对传进来的字符串全部进行转义编码,因此如果想对URL编码,最好不要使用此方法。而encodeURI()用于编码整个URI,因为URI中的合法字符都不会被编码转换。encodeURIComponent方法在编码单个URIComponent(指请求参数)应当是最常用的,它可以讲参数中的中文、特殊字符进行转义,而不会影响整个URL。

5 示例:

1 escape()

<script type="text/javascript">
document.write(escape("http://www.w3school.com.cn/") + "<br />")
document.write(escape("?!=()#%&"))
</script>

输出:

http%3A//www.w3school.com.cn

%3F%21%3D%28%29%23%25%26

2 encodeURI()

<script type="text/javascript">
document.write(encodeURI("http://www.w3school.com.cn/")+ "<br />")
document.write(encodeURI("http://www.w3school.com.cn/My first/"))
document.write(encodeURI(",/?:@&=+$#"))
</script>

输出:

http://www.w3school.com.cn/

http://www.w3school.com.cn/My%20first/

,/?:@&=+$#

对整个URL进行编码,而URL的特定标识符不会被转码。

3 encodeURIComponent()

例1:

<script type="text/javascript">
document.write(encodeURIComponent("http://www.w3school.com.cn/"))
document.write("<br />")
document.write(encodeURIComponent("http://www.w3school.com.cn/p 1/"))
document.write("<br />")
document.write(encodeURIComponent(",/?:@&=+$#"))
</script>

输出:

http%3A%2F%2Fwww.w3school.com.cn

http%3A%2F%2Fwww.w3school.com.cn%2Fp%201%2F

%2C%2F%3F%3A%40%26%3D%2B%24%23

例2:

<script language="javascript">document.write('
<a href="http://passport.baidu.com/?logout&aid=7&u='+encodeURIComponent(" rel="external nofollow" http://cang.baidu.com/bruce42")+'">退出</a>');</script>

对URL中的参数进行编码,因为参数也是一个URL,如果不编码会影响整个URL的跳转。

Javascript 相关文章推荐
JMenuTab简单使用说明
Mar 13 Javascript
jQuery.Validate验证库的使用介绍
Apr 26 Javascript
判断ie的两种简单方法
Aug 12 Javascript
jQuery实现从身份证号中获取出生日期和性别的方法分析
Feb 25 Javascript
如何处理JSON中的特殊字符
Nov 30 Javascript
jQuery实现CheckBox全选、全不选功能
Jan 11 Javascript
使用jQuery监听扫码枪输入并禁止手动输入的实现方法(推荐)
Mar 21 jQuery
利用require.js与angular搭建spa应用的方法实例
Jul 19 Javascript
JS时间控制实现动态效果的实例讲解
Jul 31 Javascript
基于JS实现带动画效果的流程进度条
Jun 01 Javascript
小程序api实现promise封装过程解析
Nov 21 Javascript
Vue组件基础用法详解
Feb 05 Javascript
checkbox选中与未选中判断示例
Aug 04 #Javascript
Node.js插件的正确编写方式
Aug 03 #Javascript
基于jquery实现的可编辑下拉框实现代码
Aug 02 #Javascript
基于编写jQuery的无缝滚动插件
Aug 02 #Javascript
js使用removeChild方法动态删除div元素
Aug 01 #Javascript
js使用html()或text()方法获取设置p标签的显示的值
Aug 01 #Javascript
js中的getAttribute方法使用示例
Aug 01 #Javascript
You might like
php 动态执行带有参数的类方法
2009/04/10 PHP
php面向对象全攻略 (九)访问类型
2009/09/30 PHP
关于php循环跳出的问题
2013/07/01 PHP
谈谈PHP中substr和substring的正确用法及相关参数的介绍
2015/12/16 PHP
PHP中的empty、isset、isnull的区别与使用实例
2019/03/22 PHP
PHP开发API接口签名生成及验证操作示例
2020/05/27 PHP
jquery构造器的实现代码小结
2011/05/16 Javascript
jQuery EasyUI API 中文文档 - PropertyGrid属性表格
2011/11/18 Javascript
JavaScript中__proto__与prototype的关系深入理解
2012/12/04 Javascript
Extjs中ComboBoxTree实现的下拉框树效果(自写)
2013/05/28 Javascript
通过$(this)使用jQuery包装后的方法或属性
2014/05/18 Javascript
用js闭包的方法实现多点标注冒泡示例
2014/05/29 Javascript
使用JavaScript进行进制转换将字符串转换为十进制
2014/09/21 Javascript
nodejs通过phantomjs实现下载网页
2015/05/04 NodeJs
JavaScript中获取HTML元素值的三种方法
2016/06/20 Javascript
文件上传插件SWFUpload的使用指南
2016/11/29 Javascript
JavaScript实现的原生态Tab标签页功能【兼容IE6】
2017/09/18 Javascript
微信小程序按钮去除边框线分享页面功能
2018/08/27 Javascript
微信小程序实现点赞、取消点赞功能
2018/11/02 Javascript
详解使用uni-app开发微信小程序之登录模块
2019/05/09 Javascript
Angular6使用forRoot() 注册单一实例服务问题
2019/08/27 Javascript
uni-app实现点赞评论功能
2019/11/25 Javascript
Python工程师面试题 与Python Web相关
2016/01/14 Python
ubuntu安装sublime3并配置python3环境的方法
2018/03/15 Python
解决pycharm界面不能显示中文的问题
2018/05/23 Python
Python实现AI换脸功能
2020/04/10 Python
html5使用html2canvas实现浏览器截图的示例
2017/08/31 HTML / CSS
哥德堡通行证:Gothenburg Pass
2019/12/09 全球购物
Blue Nile蓝色尼罗河香港官网:世界最大在线钻石珠宝销售商
2020/05/07 全球购物
入党自我鉴定
2014/03/25 职场文书
公司建议书怎么写
2014/05/15 职场文书
工伤事故赔偿协议书
2014/10/27 职场文书
委托公证书格式
2015/01/26 职场文书
小学教师党员承诺书
2015/04/27 职场文书
2015年重阳节活动主持词
2015/07/30 职场文书
z-index不起作用
2021/03/31 HTML / CSS