encode

更新时间:2022-12-29 02:25:52 阅读: 评论:0


2022年12月29日发(作者:清油)

js中编码函数:escape,encodeURI与

encodeURIComponent详解

1、eacape():该⽅法不会对ASCII字母和数字进⾏编码,也不会对下⾯这些ASCII标点符号进⾏编码:*@-_+./。其他所

有的字符都会被转义序列替换。其它情况下escape,encodeURI,encodeURIComponent编码结果相同。

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

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

ECMAScriptv3反对使⽤该⽅法,应⽤使⽤decodeURI()和decodeURIComponent()替代它。

2、encodeURI和encodeURIComponent

encodeURI和encodeURIComponent都是ECMA-262标准中定义的函数,所有兼容这个标准的语⾔(如JavaScript,

ActionScript)都会实现这两个函数。它们都是⽤来对URI(RFC-2396)字符串进⾏编码的全局函数,但是它们的处理⽅式

和使⽤场景有所不同。为了解释它们的不同,我们⾸先需要理解RFC-2396中对于URI中的字符分类:

1>保留字符(rervedcharacters):这类字符是URI中的保留关键字符,它们⽤于分割URI中的各个部分。这些字符是:";"|

"/"|"?"|":"|"@"|"&"|"="|"+"|"$"|","

2>Mark字符(markcharacters):这类字符在RFC-2396中特别定义,但是没有特别说明⽤途,可能是和别的RFC标准相

关。这些字符是:"-"|"_"|"."|"!"|"~"|"*"|"'"|"("|")"

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

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

encodeURI:该函数对传⼊字符串中的所有⾮(基本字符、Mark字符和保留字符)进⾏转义编码(escaping)。所有的需要转

义的字符都按照UTF-8编码转化成为⼀个、两个或者三个字节的⼗六进制转义字符(%xx)。例如,字符空格""转换成

为"%20"。在这种编码模式下⾯,需要编码的ASCII字符⽤⼀个字节转义字符代替,在u0080和u007ff之间的字符⽤两个字节

转义字符代替,其他16为Unicode字符⽤三个字节转义字符代替。

Stringurname=ameter("urname");

获得的urname值为A,⽽不是我们希望的A&TPlastic。因为urname=A&TPlastic,其中含有了保留字符&,并且没有进

⾏编码,所以urname的值被其给截断了。所以正确的做法是,对其进⾏编码:encodeURIComponent("A&TPlastic")==

A%26T%20Plastic,然后将上⾯的连接改为:

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

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

之所以有上⾯两个不同的函数,是因为我们在写JS代码的时候对URI进⾏两种不同的编码处理需求。encodeURI可以⽤来对

完整的URI字符串进⾏编码处理。⽽encodeURIComponent可以对URI中⼀个部分进⾏编码,从⽽让这⼀部分可以包含⼀些

URI保留字符。这在我们⽇常编程中是⼗分有⽤的。⽐如下⾯的URI字符串:

在这个URI字符串中。页⾯会创建HTML格式的邮件内容,⾥⾯会包含⼀个链接,这个链接的地址就是上

⾯URI字符串中的url值。显然上⾯的url值是URI中的⼀个部分,⾥⾯包含了URI保留关键字符。我们必须调⽤

encodeURIComponent对它进⾏编码后使⽤,否则上⾯的URI字符串会被浏览器认为是⼀个⽆效的URI。

正确的URI应该如下:

最多使⽤的应为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&TPlastic"));//A%26T%20Plastic

alert(escape("A&TPlastic"));//A%26T%20Plastic

alert(encodeURI("A&TPlastic"));//A&T%20Plastic

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

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

encodeURIComponent就编码了保留字符&。

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

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

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

如果使⽤encodeURIComponent来处理中⽂乱码,那么前端需要使⽤两次encodeURIComponent(encodeURIComponent('你

好')),Java后端使⽤:

(param,"UTF-8");

来解码;

参考:

总结

以上就是这篇⽂章的全部内容了,希望本⽂的内容对⼤家的学习或者⼯作能带来⼀定的帮助,如果有疑问⼤家可以留⾔交流,

谢谢⼤家对的⽀持。

本文发布于:2022-12-29 02:25:52,感谢您对本站的认可!

本文链接:http://www.wtabcd.cn/fanwen/fan/90/50535.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

上一篇:breach
下一篇:abercrombie
标签:encode
相关文章
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图