js脚本怎么转码?

JavaScript031

js脚本怎么转码?,第1张

可以使用js自带的转码方法escape(),encodeURI()和encodeURIComponent()。

下面是详细介绍:

Js中escape(),encodeURI()和encodeURIComponent()使用和比较:

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

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

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

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

escape()不编码的字符:@*/+

encodeURI() 不编码的字符:~!@#$&*()=:/,?+"

encodeURIComponent()不编码的字符: ~!*()''

函数 描述

encodeURI() 把字符串编码为

URI

encodeURIComponent() 把字符串编码为

URI

组件

escape() 对字符串进行编码

上面是查询来自w3school的资料。那么三者之间有什么区别呢,请容我测试测试。

复制代码

代码如下:

var

str

=

"http://localhost:8080/Product/index?id=123&attr=456&area=中国"

console.log(encodeURI(str))

console.log(encodeURIComponent(str))

console.log(escape(str))

打印结果如下:

复制代码

代码如下:

http://localhost:8080/Product/index?id=123&attr=456&area=%E4%B8%AD%E5%9B%BD

http%3A%2F%2Flocalhost%3A8080%2FProduct%2Findex%3Fid%3D123%26attr%3D456%26area%3D%E4%B8%AD%E5%9B%BD

http%3A//localhost%3A8080/Product/index%3Fid%3D123%26attr%3D456%26area%3D%u4E2D%u56FD

可以看出,

encodeURI不会对:/?&等uri中起分割作用的字符进行编码;

encodeURIComponent则会。

观察escape则发现,:?&都被转码了,而/没有,w3school解释是,escape函数会对ascii码中字母、数字及符号(

*

@

-

_

+

.

/

)之外的所有字符进行编码。

另外,我们可以看出escape对汉字“中国”编码后结果与前两者不同。W3SCHOOL也建议不使用该方法,用前两者代替。

以上所述就是本文的全部内容了,希望对大家学习javascript能够有所帮助。

encodeURI 函数对 URI 进行完整的编码

encodeURIComponent 函数假定它的参数是 URI 的一部分(比如协议、主机名、路径或查询字符串)。因此 encodeURIComponent() 函数将转义用于分隔 URI 各个部分的标点符号。

如果 URI 组件中含有分隔符,比如 ? 和 #,则应当使用 encodeURIComponent() 方法分别对各组件进行编码。

所以encodeURIComponent比encodeURI编码的范围更大。

1、如果只是编码字符串,使用escape

2、如果需要编码整个URL,然后需要使用这个URL,使用encodeURl

3、如果需要编码URL中的参数,使用encodeURlComponent

1、string --->base-64转码

2、base64转码的对象只能是字符串,不能对unicode转码

对于汉字,这就要使用window.encodeURIComponent和window.decodeURIComponent