您现在的位置是:首页 > Web设计

Web设计

JS中如何对加号(+)进行编码处理

2020-11-12 09:09:33 Web设计 admin
今天在使用js进行页面跳转的时候,发现url中的+号编码后变成了一个空格,我是encodeURI编码的,换成escape测试也是一样。最后换成encodeURIComponent进行编码才解决问题,所以从网上摘抄encodeURI和enco
今天在使用js进行页面跳转的时候,发现url中的+号编码后变成了一个空格,我是encodeURI编码的,换成escape测试也是一样。最后换成encodeURIComponent进行编码才解决问题,所以从网上摘抄encodeURIencodeURIComponent的区分如下:

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

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

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

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

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

encodeURIComponent:该函数处理方式和encodeURI只有一个不同点,那就是对于保留字符同样做转义编码。例如,字符":"被转义字符"%3A"代替。

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