`
wiiln
  • 浏览: 151897 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

JS编码比较

阅读更多
escape(), encodeURI()和encodeURIComponent()是在Javascript中用于编码字符串的三个常用的方法,而他们之间的异同却困扰了很多的Javascript初学者,今天我就在这里对这三个方法详细地分析与比较一下。

escape() 方法

MSDN JScript Reference中如是说:

The escape method returns a string value (in Unicode format) that contains the contents of [the argument]. All spaces, punctuation, accented characters, and any other non-ASCII characters are replaced with %xx encoding, where xx is equivalent to the hexadecimal number representing the character. For example, a space is returned as "%20."

鄙人译:escape方法以Unicode格式返回一个包含传入参数内容的string类型的值。 Escape方法会将传入参数中所有的空格、标点符号、重音字符以及其它任何非ASCII字符替换为%xx的编码形式,其中xx与其所表示的字符的16进制数表示形式相同。如空格字符的16进制表示形式为0x20,则此时xx应为20,即escape(‘ ’) 返回“%20”。

Mozilla Developer Core Javascript Guide中如是说:

The escape and unescape functions let you encode and decode strings. The escape function returns the hexadecimal encoding of an argument in the ISO Latin character set. The unescape function returns the ASCII string for the specified hexadecimal encoding value.

鄙人译:escape和unescape方法能够帮助你编码和解码字符串。escape方法对于ISO Latin字符集中的字符组成的参数,返回其16进制编码。相对应的,unescape方法则能将16进制编码形式的参数转化成为其ASCII码形式。

encodeURI()方法

MSDN JScript Reference中如是说:

The encodeURI method returns an encoded URI. If you pass the result to decodeURI, the original string is returned. The encodeURI method does not encode the following characters: ":", "/", ";", and "?". Use encodeURIComponent to encode these characters.

鄙人译:encodeURI方法返回一个经过编码的URI。如果将encodeURI方法的编码结果传递给decodeURI方法作参数,则能得到原始的未编码的字符串。需要注意到是encodeURI方法不编码如下字符":", "/", ";", and "?"。如果想要编码这些字符,请使用encodeURIComponent方法。

Mozilla Developer Core Javascript Guide中如是说:

Encodes a Uniform Resource Identifier (URI) by replacing each instance of certain characters by one, two, or three escape sequences representing the UTF-8 encoding of the character.

鄙人译:通过将每个属于特定的字符集合的字符替换为一个、两个或者三个(为什么是“一个、两个或者三个”本人也没有搞懂,望高人赐教)使用UTF-8编码来表示这个字符的escape序列来编码一个URI。如 ~!@#$%^&*(){}[]=:/,;?+\'"\\ 将被替换为 ~!@#$%25%5E&*()%7B%7D%5B%5D=:/,;?+'%22%5C

encodeURIComponent()方法

MSDN JScript Reference中如是说:

The encodeURIComponent method returns an encoded URI. If you pass the result to decodeURIComponent, the original string is returned. Because the encodeURIComponent method encodes all characters, be careful if the string represents a path such as /folder1/folder2/default.html. The slash characters will be encoded and will not be valid if sent as a request to a web server. Use the encodeURI method if the string contains more than a single URI component.

鄙人译:encodeURIComponent方法返回一个编码过的URI。如果将encodeURIComponent方法的编码结果传递给encodeURIComponent方法作参数,则能得到原始的未编码的字符串。因为encodeURIComponent方法会编码所有的字符,所以如果待编码的字符串是用来表示一个路径(如/dir1/dir2/index.htm)时,就一定要小心使用了。‘/’符号会被其编码之后,将不再是一个有效的路径标识符,所以不能被web服务器正确地识别。当字符串包含一个单独的URI component(指?后面的请求参数)的时候,请使用此方法。

Mozilla Developer Core Javascript Guide中如是说:

Encodes a Uniform Resource Identifier (URI) component by replacing each instance of certain characters by one, two, or three escape sequences representing the UTF-8 encoding of the character.

鄙人译:通过将每个属于特定的字符集合的字符替换为一个、两个或者三个(为什么是“一个、两个或者三个”本人也没有搞懂,望高人赐教)使用UTF-8编码来表示这个字符的escape序列来编码一个URIComponent。

有什么区别?何时使用?


通过上面的介绍可以看出,MS的文档明显要比Mozilla详细、易懂一些,但是它们表达的都是一个意思。但是escape(), encodeURI()和 encodeURIComponent()有什么异同,它们分别适用于那种特定的情况呢?

escape方法并不编码字符+。而我们知道,在用户提交的表单字段中,如果有空格,则会被转化为+字符,而服务器解析的时候则会认为+号代表空格。由于这个缺陷,escape方法并不能正确地处理所有的非ASCII字符,你应当尽量避免使用escape方法,取而代之,你最好选择encodeURIComponent()方法。
escape()不编码的字符:@*/+

相对于使用escape方法,使用encodeURI方法会显得更专业一些。当你需要编码一整个URI的时候,你可以使用此方法,因为URI中的合法字符都不会被编码转换。需要注意到是字符’也是URI中的合法字符,所以也不会被编码转换。
encodeURI() 不编码的字符: ~!@#$&*()=:/,;?+'

encodeURIComponent方法在编码单个URIComponent(指请求参数)应当是最常用的。需要注意到是字符’也是URI中的合法字符,所以也不会被编码转换。
encodeURIComponent()不编码的字符: ~!*()'

js对文字进行编码涉及3个函数:escape,encodeURI,encodeURIComponent,相应3个解码函数:unescape,decodeURI,decodeURIComponent

1、    传递参数时需要使用encodeURIComponent,这样组合的url才不会被#等特殊字符截断。                           

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

2、    进行url跳转时可以整体使用encodeURI

例如:Location.href=encodeURI("http://cang.baidu.com/do/s?word=百度&ct=21");

3、   js使用数据时可以使用escape

例如:搜藏中history纪录。

4、   escape对0-255以外的unicode值进行编码时输出%u****格式,其它情况下escape,encodeURI,encodeURIComponent编码结果相同。


最多使用的应为encodeURIComponent,它是将中文、韩文等特殊字符转换成utf-8格式的url编码,所以如果给后台传递参数需要使用encodeURIComponent时需要后台解码对utf-8支持(form中的编码方式和当前页面编码方式相同)

escape不编码字符有69个:*,+,-,.,/,@,_,0-9,a-z,A-Z

encodeURI不编码字符有82个:!,#,$,&,',(,),*,+,,,-,.,/,:,;,=,?,@,_,~,0-9,a-z,A-Z

encodeURIComponent不编码字符有71个:!, ',(,),*,-,.,_,~,0-9,a-z,A-Z


分享到:
评论

相关推荐

    Kotlin开发的播放器(默认支持MediaPlayer播放器,可扩展VLC播放器、IJK播放器、EXO播放器、阿里云播放器)

    基于Kotlin开发的播放器,默认支持MediaPlayer播放器,可扩展VLC播放器、IJK播放器、EXO播放器、阿里云播放器、以及任何使用TextureView的播放器, 开箱即用,欢迎提 issue 和 pull request

    【创新无忧】基于斑马优化算法ZOA优化极限学习机ELM实现乳腺肿瘤诊断附matlab代码.rar

    1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。 替换数据可以直接使用,注释清楚,适合新手

    全套S7-1200一拖三恒压供水程序样例+PID样例+触摸屏样例 1、此程序采用S7-1200PLC和KTP1000PN触摸屏人机执行PID控制变频器实现恒压供水. 包括plc程序,触摸屏程序

    全套S7-1200一拖三恒压供水程序样例+PID样例+触摸屏样例 。 1、此程序采用S7-1200PLC和KTP1000PN触摸屏人机执行PID控制变频器实现恒压供水. 包括plc程序,触摸屏程序,项目图纸(重要) 2.程序为实际操作项目案例程序,程序带有注释说明。 PLC程序打开软件版本为西门子博图V13以上均可打开。 实际工程已验证

    【未发表】基于白鲨优化算法WSO优化支持向量机SVM实现塑料热压成型预测附matlab代码.rar

    1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。 替换数据可以直接使用,注释清楚,适合新手

    电子商务师之职业道德试题.doc

    电子商务师之职业道德试题.doc

    android kotlin实现totp动态身份验证器

    android kotlin实现totp动态身份验证器

    u-boot-ar9331.bin

    openwrt 后台

    车辆管理-JAVA-基于springboot车辆管理系统设计与实现(毕业论文+PPT)

    1. 车辆信息管理 1.1 车辆登记 功能描述:用户可以输入新购车辆的基本信息,如品牌、型号、车牌号码、VIN(车辆识别码)、购买日期、保险信息等,进行登记。 目标:建立完整的车辆档案,便于后续管理和查询。 1.2 车辆信息查询 功能描述:支持根据各种条件(如车牌号、品牌、注册时间等)查询车辆信息,通过列表或详情页面展示相关数据。 目标:提升信息获取效率,方便用户随时查看车辆状态。 1.3 车辆状态监控 功能描述:实时监控车辆的状态信息,如是否在用、是否过期、当前里程数等,并通过报警或提醒功能通知用户。 目标:确保车辆始终处于良好状态,及时处理潜在问题。 2. 维护与保养管理 2.1 维护记录管理 功能描述:记录每辆车的维护和保养历史,包括维护日期、内容、费用以及服务机构等信息。 目标:为后续的车辆维护提供参考依据,确保车辆安全性与可靠性。 2.2 保养提醒 功能描述:根据车辆保养周期设置自动提醒,提示用户进行定期保养或检查。 目标:帮助用户避免由于忽视保养导致的车辆故障,提高车辆使用寿命。 3. 驾驶员管理 3.1 驾驶员信息录入 功能描述:录入和管理驾驶员的基本信息,包括姓名、身份

    数据结构-排序篇.html

    转成html版,要是文章被锁,可以下载这个,自行查看

    第六章 基于定子电压定向矢量控制的双馈电机控制系统设计

    内容概要:本文深入探讨了双馈电机(DFIG)矢量控制策略中,传统基于磁场定向控制所存在的问题及其解决方案,即采用定子电压定向矢量控制来改善系统动态性能并实现对有功功率和无功功率的有效解耦。文中详细介绍了定子电压矢量的构建方法及其数学推导,最终得到了双馈电机转子电流内环与外部控制器的设计原则。并通过一系列公式推导展示了在稳定状态下的有功功率和无功功率分别受控于转子电流的哪一部分。此外,还提出了针对电磁转矩与电压波动等问题的具体解决思路。 适用人群:电机工程师、电力电子工程师及相关科研工作者。 使用场景及目标:适用于研究和发展大型风力发电机组中使用的MW级别双馈发电机的先进控制算法,提高电力转换效率与系统稳定性。 其他说明:该文章不仅从理论上剖析了定子电压定向矢量控制的技术优势,也为实际工程应用提供了有价值的参考。同时注意,在理论学习基础上还需关注其实验验证环节,确保理论假设符合实际情况。

    基于ssm的留学生交流互动论坛网站源码(java毕业设计完整源码+LW).zip

    留学生交流互动论坛网站的主要实现功能包括:管理员:首页、个人中心、学生管理、经验分享管理、计划分享管理、软件推荐管理、网址推荐管理、标签分类管理、留言板管理、交流论坛、系统管理,学生;首页、个人中心、经验分享管理、计划分享管理、软件推荐管理、网址推荐管理、标签分类管理,前台首页;首页、经验分享、计划分享、软件推荐、网址推荐、交流论坛、学习资讯、留言反馈、个人中心、后台管理功能,基本上实现了整个留学生交流互动论坛网站的过程。 环境说明: 开发语言:java JDK版本:jdk1.8 框架:ssm 数据库:mysql 5.7/8 数据库工具:navicat 开发软件:eclipse/idea 部署容器:tomcat8

    【创新无忧】基于蝠鲼觅食优化算法MRFO-VMD-KELM优化变分模态分解结合核极限学习机实现光伏预测附matlab代码.rar

    1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。 替换数据可以直接使用,注释清楚,适合新手

    【创新无忧】基于阿基米德优化算法AOA优化极限学习机KELM-Adaboost实现故障诊断附matlab代码.rar

    1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。 替换数据可以直接使用,注释清楚,适合新手

    AirSLAM是一种高效的视觉SLAM系统,旨在应对短期和长期的照明挑战 使用C++和NVIDIA TensorRT部署和加速特征检测和匹配网络

    AirSLAM具有双模式(V-SLAM和VI-SLAM),由AirVO(IROS23)升级而来。 AirSLAM是一种高效的视觉SLAM系统,旨在应对短期和长期的照明挑战。我们的系统采用了一种混合方法,将用于特征检测和匹配的深度学习技术与传统的后端优化方法相结合。具体而言,我们提出了一种同时提取关键点和结构线的统一卷积神经网络(CNN)。然后,这些特征以耦合的方式进行关联、匹配、三角化和优化。此外,我们引入了一个轻量级的重新定位管道,该管道重用构建的映射,其中关键点、线条和结构图用于将查询帧与映射相匹配。为了增强所提出的系统对现实世界机器人的适用性,我们使用C++和NVIDIA TensorRT部署和加速特征检测和匹配网络。在各种数据集上进行的广泛实验表明,我们的系统在照明挑战环境中优于其他最先进的视觉SLAM系统。效率评估表明,我们的系统在PC上可以以73Hz的速率运行,在嵌入式平台上可以以40Hz的速度运行。

    基于ssm的汽车在线销售系统源码(java毕业设计完整源码+LW).zip

    汽车在线销售系统的主要使用者分为管理员:个人中心、用户管理、车辆信息管理 、汽车信息管理 、汽车类型管理、汽车颜色管理、入库记录管理、出库记录管理、车辆购买管理、运输收费管理、订单状态管理管理、留言板管理、系统管理、管理员管理、留言管理等等。用户:个人中心、车辆购买、运输收费管理、订单状态管理、我的收藏管理等功能。首页前台功能:首页、汽车信息、新闻资讯、留言反馈、我的收藏通过这些功能模块的设计,基本上实现了整个汽车在线销售系统的过程。 环境说明: 开发语言:java JDK版本:jdk1.8 框架:ssm 数据库:mysql 5.7/8 数据库工具:navicat 开发软件:eclipse/idea 部署容器:tomcat8

    【创新无忧】基于北方苍鹰优化算法NGO优化相关向量机RVM实现数据多输入单输出回归预测附matlab代码.rar

    1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。 替换数据可以直接使用,注释清楚,适合新手

    随机森林在高效视频编码屏幕内容压缩模式跳过中的应用

    内容概要:本文研究了高效的屏幕内容编码(SCC)方法,特别是针对High Efficiency Video Coding (HEVC) 引入的新工具——帧内块复制 (Intra Block Copy, IBC) 和调色板 (Palette) 模式的复杂度问题。为减少编码器复杂度并保持编码效率,提出了一种基于随机森林(Random Forest, RF)的模式跳过方法。通过对屏显内容特性的特征提取和邻近编码单元的相关性分析,以及中间成本信息的利用,提出了适用于不同编码单元大小的多级RF模型。通过超参数优化和性能评估,实验结果显示所提出的模式跳过方法能显著降低编码时间,平均编码时间减少了45.06%,且比特率增加仅为1.08%。 适合人群:视频编码与解码领域的研究人员、从事多媒体通信系统开发的技术人员。 使用场景及目标:用于提高屏幕内容视频编码的效率,特别是在实时应用场景中需要快速编码的情况。 其他说明:本文详细介绍了特征选择、样本准备、超参数调优以及实验结果对比,验证了所提方法的有效性和鲁棒性。

    网页设计期末大作业-大鱼海棠(html+css+js).zip

    学期期末网页设计作业合集分享 内容概览: 这个分享包涵了我在本学期期末完成的网页设计作业,其中包含多个关键部分,以帮助你全面了解和学习网页设计的整个流程。 HTML、CSS、JS、Vue代码:我提供了完整的网页源代码,详细简单有效 项目文件:除了代码,我还分享了整个项目的文件,包括设计稿、图标、图片等资源。这些资源对于理解项目背景和设计思路至关重要。 MD文档与操作手册:为了方便他人理解和使用我的作品,我编写了详细的操作手册和使用说明,同时提供了一份Markdown格式的文档,概述了项目的主要功能和特点。 学习笔记:在项目开发过程中,我记录了大量的学习笔记和心得体会。这些笔记不仅有助于理解项目的开发过程,还能为学习前端技术提供宝贵的参考资料。 适用人群: 这份作业合集适用于所有对网页设计、前端开发感兴趣的人,无论你是学生、初学者还是有一定经验的开发者。无论你是想学习新的技术,还是想了解一个完整的项目开发流程,这份资料都将为你提供极大的帮助。 使用建议: 按部就班地学习:建议从基础的HTML、CSS开始,逐步深入到JavaScript和Vue的学习。通过实践,逐步掌握前端开发的各项技能。

    【未发表】基于花朵授粉优化算法FPA优化支持向量机SVM实现塑料热压成型预测附matlab代码.rar

    1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。 替换数据可以直接使用,注释清楚,适合新手

    机械原理课程设计之牛头刨床7点和12点.doc

    机械原理课程设计之牛头刨床7点和12点.doc

Global site tag (gtag.js) - Google Analytics