深入分析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 相关文章推荐
Javascript 陷阱 window全局对象
Nov 26 Javascript
JS面向对象编程之对象使用分析
Aug 19 Javascript
在JS中解析HTML字符串示例代码
Apr 16 Javascript
jquery限定文本框只能输入数字(整数和小数)
Jan 08 Javascript
教你用javascript实现随机标签云效果_附代码
Mar 16 Javascript
基于jQuery实现仿百度首页选项卡切换效果
May 29 Javascript
Web安全测试之XSS实例讲解
Aug 15 Javascript
javascript基础练习之翻转字符串与回文
Feb 20 Javascript
微信小程序实践之动态控制组件的显示/隐藏功能
Jul 18 Javascript
浅谈laytpl 模板空值显示null的解决方法及简单的js表达式
Sep 19 Javascript
基于JavaScript的数据结构队列动画实现示例解析
Aug 06 Javascript
vue-cli3.0修改打包后的文件名和文件地址,打包后本地运行报错解决
Apr 06 Vue.js
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
饭制《星际争霸》Mod:优化游戏机制 增加新单位
2017/07/02 星际争霸
PHP的加密方式及原理
2012/06/14 PHP
开源php中文分词系统SCWS安装和使用实例
2014/04/11 PHP
js 自定义的联动下拉框
2010/02/07 Javascript
js时间戳格式化成日期格式的多种方法
2013/11/11 Javascript
AngularJS转换响应内容
2016/01/27 Javascript
Js与Jq获取浏览器和对象值的方法
2016/03/18 Javascript
Angular整合zTree的示例代码
2018/01/24 Javascript
JavaScript中的回调函数实例讲解
2019/01/27 Javascript
axios异步提交表单数据的几种方法
2019/08/11 Javascript
微信小程序获取当前位置和城市名
2019/11/13 Javascript
原生js实现表格循环滚动
2020/11/24 Javascript
python time模块用法实例详解
2014/09/11 Python
github配置使用指南
2014/11/18 Python
python入门之语句(if语句、while语句、for语句)
2015/01/19 Python
Python中实现从目录中过滤出指定文件类型的文件
2015/02/02 Python
Python实现计算最小编辑距离
2016/03/17 Python
Pycharm学习教程(4) Python解释器的相关配置
2017/05/03 Python
Python中交换两个元素的实现方法
2018/06/29 Python
python实现AES加密和解密
2019/03/27 Python
对PyQt5中树结构的实现方法详解
2019/06/17 Python
Django中提供的6种缓存方式详解
2019/08/05 Python
Python使用grequests(gevent+requests)并发发送请求过程解析
2019/09/25 Python
python生成器推导式用法简单示例
2019/10/08 Python
简单了解python装饰器原理及使用方法
2019/12/18 Python
tensorflow:指定gpu 限制使用量百分比,设置最小使用量的实现
2020/02/06 Python
手工制作的音乐盒:Music Box Attic
2019/09/05 全球购物
质检部岗位职责
2013/11/11 职场文书
市场营销毕业求职信
2014/08/07 职场文书
关于成绩下滑的自我检讨书
2014/09/20 职场文书
国土资源局开展党的群众路线教育实践活动整改措施
2014/09/26 职场文书
2014年优质护理服务工作总结
2014/11/14 职场文书
2014年政协委员工作总结
2014/12/01 职场文书
幼儿园开学通知
2015/04/24 职场文书
2015年妇幼保健工作总结
2015/05/19 职场文书
2016年政治理论学习心得体会
2016/01/25 职场文书