全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

js中编码函数:escape,encodeURI与encodeURIComponent详解

1、eacape(): 该方法不会对 ASCII 字母和数字进行编码,也不会对下面这些 ASCII 标点符号进行编码: * @ - _ + . / 。其他所有的字符都会被转义序列替换。其它情况下escape,encodeURI,encodeURIComponent编码结果相同。

   escape对0-255以外的unicode值进行编码时输出%u****格式

   可以使用 unescape() 对 escape() 编码的字符串进行解码。

   ECMAScript v3 反对使用该方法,应用使用 decodeURI() 和 decodeURIComponent() 替代它。

2、encodeURI 和 encodeURIComponent

encodeURI 和 encodeURIComponent都是ECMA-262标准中定义的函数,所有兼容这个标准的语言(如JavaScript, ActionScript)都会实现这两个函数。它们都是用来对URI (RFC-2396)字符串进行编码的全局函数,但是它们的处理方式和使用场景有所不同。为了解释它们的不同,我们首先需要理解RFC-2396中对于 URI中的字符分类:

1>保留字符(reserved characters):这类字符是URI中的保留关键字符,它们用于分割URI中的各个部分。这些字符是:";" | "/" | "?" | ":" | "@" | "&" | "=" | "+" | "$" | ","

2>Mark字符(mark characters):这类字符在RFC-2396中特别定义,但是没有特别说明用途,可能是和别的RFC标准相关。 这些字符是:"-" | "_" | "." | "!" | "~" | "*" | "'" | "(" | ")"

3>基本字符(alphanum characters):这类字符是URI中的主体部分,它包括所有的大写字母、小写字母和数字。

在介绍完上面三类字符串后,我们就非常容易来解释encodeURI和encodeURIComponent函数的不同之处了:

encodeURI: 该函数对传入字符串中的所有非(基本字符、Mark字符和保留字符)进行转义编码(escaping)。所有的需要转义的字符都按照UTF-8编码转化成 为一个、两个或者三个字节的十六进制转义字符(%xx)。例如,字符空格" "转换成为"%20"。在这种编码模式下面,需要编码的ASCII字符用一个字节转义字符代替,在\u0080和\u007ff之间的字符用两个字节转义字符代替,其他16为Unicode字符用三个字节转义字符代替。

encodeURIComponent: 该函数处理方式和encodeURI只有一个不同点,那就是对于保留字符同样做转义编码。这样url中的参数和值才不会被#等特殊字符截断。 比如:http://localhost:8080/xss/XssServlet?username=A&T Plastic,该url,后台的代码:

String username = request.getParameter("username");

获得的username值为A,而不是我们希望的 A&T Plastic。因为 username=A&T Plastic,其中含有了保留字符&,并且没有进行编码,所以username的值被其给截断了。所以正确的做法是,对其进行编码:encodeURIComponent("A&T Plastic") == A%26T%20Plastic,然后将上面的连接改为:

http://localhost:8080/xss/XssServlet?username=A%26T%20Plastic,后台才能获得正确的值:username==A&T Plastic。

因为username的值含有了uri的保留字符,所以需要进行编码。

例如,字符":"被转义字符"%3A"代替

之 所以有上面两个不同的函数,是因为我们在写JS代码的时候对URI进行两种不同的编码处理需求。encodeURI可以用来对完整的URI字符串进行编码处理。而encodeURIComponent可以对URI中一个部分进行编码,从而让这一部分可以包含一些URI保留字符。这在我们日常编程中是十分有用的。比如下面的URI字符串:

http://www.mysite.com/send-to-friend.aspx?url=http://www.mysite.com/product.html

在 这个URI字符串中。send-to-friend.aspx页面会创建HTML格式的邮件内容,里面会包含一个链接,这个链接的地址就是上面URI字符 串中的url值。显然上面的url值是URI中的一个部分,里面包含了URI保留关键字符。我们必须调用encodeURIComponent对它进行编 码后使用,否则上面的URI字符串会被浏览器认为是一个无效的URI。

正确的URI应该如下:

http://www.mysite.com/send-to-friend.aspx?url=http%3A%2F%2Fwww.mysite.com%2Fproduct.html

最多使用的应为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

例子:

alert(encodeURIComponent("A&T Plastic")); //A%26T%20Plastic
alert(escape("A&T Plastic"));  //A%26T%20Plastic
alert(encodeURI("A&T Plastic"));  //A&T%20Plastic
alert(escape("A&T Plastic中"));  //A%26T%20Plastic%uFFFD%uFFFD

我们看到 encodeURI 没有编码uri的保留字符 & ,'中'被编码成了 %uFFFD%uFFFD

encodeURIComponent 就编码了保留字符&

url的编码经常会被利用在XSS攻击中来绕过服务端的 xss filter, 对有威胁的url进行伪装,让不明用户去点击。

所以如果只是处理 get 提交时url地址中的乱码问题,可以使用 encodeURI 来编码整个url;

如果参数中含有保留字符需要进行编码,那么应该使用 encodeURIComponent 来编码部分参数;

如果使用encodeURIComponent来处理中文乱码,那么前端需要使用两次encodeURIComponent(encodeURIComponent('你好')),Java后端使用:

java.Net.URLDecoder.decode(param,"UTF-8");

来解码;

参考:

https://www./article/22880.htm

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对的支持。


# js  # escape  # encodeuri  # encodeuri编码  # encodeuricomponent  # JavaScript使用escape()、encodeURI()和decodeURI()实现URI编  # js 转义字符及URI编码详解  # js中字符串编码函数escape()、encodeURI()、encodeURIComponent(  # 从此不再惧怕URI编码 JavaScript及C# URI编码详解  # js编码之encodeURIComponent使用介绍(asp  # php)  # Javascript下的urlencode编码解码方法附decodeURIComponent  # JS中三种URI编码方式对比分析  # 这类  # 都是  # 会对  # 可以使用  # 是一个  # 特殊字符  # 这一  # 也不  # 是因为  # 成了  # 最多  # 两种  # 两次  # 它是  # 这两个  # 有所不同  # 对其  # 在这种  # 只有一个  # 这篇文章 


相关文章: 建站之星安装提示数据库无法连接如何解决?  如何制作公司的网站链接,公司想做一个网站,一般需要花多少钱?  高配服务器限时抢购:企业级配置与回收服务一站式优惠方案  建站主机无法访问?如何排查域名与服务器问题  高防服务器租用首荐平台,企业级优惠套餐快速部署  如何实现建站之星域名转发设置?  如何有效防御Web建站篡改攻击?  如何高效搭建专业期货交易平台网站?  网站制作和推广的区别,想自己建立一个网站做推广,有什么快捷方法马上做好一个网站?  建站之星与建站宝盒如何选择最佳方案?  建站之星导航如何优化提升用户体验?  如何快速生成凡客建站的专业级图册?  如何在搬瓦工VPS快速搭建网站?  ,石家庄四十八中学官网?  如何在阿里云完成域名注册与建站?  如何在景安服务器上快速搭建个人网站?  如何续费美橙建站之星域名及服务?  如何通过虚拟主机快速搭建个人网站?  如何通过宝塔面板实现本地网站访问?  如何在自有机房高效搭建专业网站?  如何在阿里云购买域名并搭建网站?  南平网站制作公司,2025年南平市事业单位报名时间?  如何用wdcp快速搭建高效网站?  如何快速生成专业多端适配建站电话?  网站制作费用多少钱,一个网站的运营,需要哪些费用?  建站VPS选购需注意哪些关键参数?  制作网站的过程怎么写,用凡科建站如何制作自己的网站?  一键制作网站软件下载安装,一键自动采集网页文档制作步骤?  北京企业网站设计制作公司,北京铁路集团官方网站?  建站主机如何选?高性价比方案全解析  品牌网站制作公司有哪些,买正品品牌一般去哪个网站买?  Bpmn 2.0的XML文件怎么画流程图  专业的网站制作设计是什么,如何制作一个企业网站,建设网站的基本步骤有哪些?  深圳网站制作培训,深圳哪些招聘网站比较好?  建站之星如何实现网站加密操作?  PHP 500报错的快速解决方法  如何选择高效响应式自助建站源码系统?  网站制作的步骤包括,正确网址格式怎么写?  成都网站制作报价公司,成都工业用气开户费用?  如何通过VPS建站实现广告与增值服务盈利?  网站制作说明怎么写,简述网页设计的流程并说明原因?  建站之星在线客服如何快速接入解答?  已有域名和空间如何搭建网站?  ,网页ppt怎么弄成自己的ppt?  微课制作网站有哪些,微课网怎么进?  公司门户网站制作公司有哪些,怎样使用wordpress制作一个企业网站?  韩国服务器如何优化跨境访问实现高效连接?  北京建设网站制作公司,北京古代建筑博物馆预约官网?  唐山网站制作公司有哪些,唐山找工作哪个网站最靠谱?  C++用Dijkstra(迪杰斯特拉)算法求最短路径 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。