js中字符串编码函数escape()、encodeURI()、encodeURIComponent()区别详解


Posted in Javascript onApril 01, 2016

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("http://cang.baidu.com/bruce42")+'">退出</a>');</script>

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

Javascript 相关文章推荐
js cookies实现简单统计访问次数
Nov 24 Javascript
javascript仿qq界面的折叠菜单实现代码
Dec 12 Javascript
javascript常用功能汇总
Jul 05 Javascript
js实现表单Radio切换效果的方法
Aug 17 Javascript
学好js,这些js函数概念一定要知道【推荐】
Jan 19 Javascript
浅谈Node Inspector 代理实现
Oct 19 Javascript
详解JavaScript 的变量
Mar 08 Javascript
构建Vue大型应用的10个最佳实践(小结)
Nov 07 Javascript
JavaScript中break、continue和return的用法区别实例分析
Mar 02 Javascript
使用React代码动态生成栅格布局的方法
May 24 Javascript
javascript实现贪吃蛇小练习
Jul 05 Javascript
用Javascript实现发送短信验证码间隔功能
Feb 08 Javascript
基于jquery实现轮播焦点图插件
Mar 31 #Javascript
javascript中错误使用var造成undefined
Mar 31 #Javascript
详解JavaScript表单验证(E-mail 验证)
Mar 31 #Javascript
js表单验证实例讲解
Mar 31 #Javascript
javascript创建cookie、读取cookie
Mar 31 #Javascript
基于javascript实现全屏漂浮广告
Mar 31 #Javascript
JS深度拷贝Object Array实例分析
Mar 31 #Javascript
You might like
PHP函数utf8转gb2312编码
2006/12/21 PHP
PHP之sprintf函数用法详解
2014/11/12 PHP
php array_walk_recursive 使用自定的函数处理数组中的每一个元素
2016/11/16 PHP
PHP实现生成模糊图片的方法示例
2017/12/21 PHP
js escape,unescape解决中文乱码问题的方法
2010/05/26 Javascript
IE6下CSS图片缓存问题解决方法
2010/12/09 Javascript
js实现仿Windows风格选项卡和按钮效果实例
2015/05/13 Javascript
对JavaScript客户端应用编程的一些建议
2015/06/24 Javascript
基于JavaScript实现网页倒计时自动跳转代码
2015/12/28 Javascript
基于Bootstrap的网页设计实例
2017/03/01 Javascript
element ui 对话框el-dialog关闭事件详解
2018/02/26 Javascript
JS工厂模式开发实践案例分析
2019/10/17 Javascript
Python 面向对象 成员的访问约束
2008/12/23 Python
跟老齐学Python之玩转字符串(2)更新篇
2014/09/28 Python
Python中urllib2模块的8个使用细节分享
2015/01/01 Python
浅谈插入排序算法在Python程序中的实现及简单改进
2016/05/04 Python
python range()函数取反序遍历sequence的方法
2018/06/25 Python
python 顺时针打印矩阵的超简洁代码
2018/11/14 Python
pytorch torch.nn.AdaptiveAvgPool2d()自适应平均池化函数详解
2020/01/03 Python
python使用for...else跳出双层嵌套循环的方法实例
2020/05/17 Python
python3.7调试的实例方法
2020/07/21 Python
python 5个顶级异步框架推荐
2020/09/09 Python
python3爬虫中多线程的优势总结
2020/11/24 Python
使用Python通过oBIX协议访问Niagara数据的示例
2020/12/04 Python
ECCO俄罗斯官网:北欧丹麦鞋履及皮具品牌
2020/06/26 全球购物
行政经理的岗位职责
2013/11/23 职场文书
高分子材料与工程专业推荐信
2013/12/01 职场文书
建筑工程管理专业自荐信范文
2013/12/28 职场文书
竞争性谈判邀请书
2014/02/06 职场文书
教师通用专业自荐书范文
2014/02/11 职场文书
个人委托书如何写
2014/09/25 职场文书
八年级物理教学反思
2016/02/19 职场文书
python使用tkinter实现透明窗体上绘制随机出现的小球(实例代码)
2021/05/17 Python
Python基础之元编程知识总结
2021/05/23 Python
如何在Python项目中引入日志
2021/05/31 Python
在windows server 2012 r2中安装mysql的详细步骤
2022/07/23 Servers