DBMNG数据库管理与应用

书籍是全世界的营养品。生活里没有书籍,就好像没有阳光;智慧里没有书籍,就好像鸟儿没有翅膀。
当前位置:首页 > 经验分享 > Javascript

js关于escape(), encodeURI()和encodeURIComponent()编码的使用测试

escape(),encodeURI() 和 encodeURIComponent() 编码函数是JavaScript编程中非常常用的几个函数,它们对应的解码函数分别是unescape(),decodeURL()和decodeURIComponent(),这里简单地归纳下几个函数的使用要点:


一,escape()函数是JavaScript1.0引入的函数,它的功能是在ISO Latin字符集(是unicode字符集的一个子集,因此也就是unicode字符集)内进行编码,所有的空格符、标点符号、特殊字符以及其他非ASCII字符都将被转化成%xx格式的字符编码,如果是大于255,则需要两个字节进行表示的时候,则转换成%uxxxx的格式(xx等于该字符在字符集表里面的编码的16进制数字)。比如,空格符对应的编码是%20。unescape方法与此相反,中文‘我’对应的编码是%u6211。不会被此方法编码的字符: @ * / +。


二,encodeURI()把URI字符串采用UTF-8编码格式转化成escape格式的字符串。不会被此方法编码的字符:! @ # $& * ( ) = : / ; ? + ' 。


三,encodeURIComponent()把URI字符串采用UTF-8编码格式转化成escape格式的字符串。与encodeURI()相比,这个方法将对更多的字符进行编码,比如 / 等字符。所以如果字符串里面包含了URI的几个部分的话,不能用这个方法来进行编码,否则 / 字符被编码之后URL将显示错误。不会被此方法编码的字符:! * ( ) 。


综上可以看出,三个编码函数使用的字符集均是unicode的,但对应的字符编码方式有所不同,escape只是简单的编码成16进制而言,而后面的两个函数则是按照utf-8进行编码,不同的只是需要编码的字符数目有所不同而已,下面写个测试代码:

执行后输出:%u6211|%E6%88%91|%E6%88%91

可以看出:

escape把中文的‘我’编码成%u6211的格式,对应的在unicode字符集的编码的值是25105,这里说明escape编码只是把字符的unicode编码简单地用16进制进行表示而已。

而encodeURI和encodeURIComponent则用utf-8的编码方式进行编码,现在被编码成三个字节,我们把各自对应的%去掉后变成:

E68891,然后我们进一步的写成二进制的格式:1110 0110 1000 1000 1001 0001,然后按照utf-8编码的规则,去掉第一个字节的

1110,第二个字节的10和第三个字节的10后变成:0110 00 1000 01 0001,写成十六进制的格式:6211,恰好对应unicode的编码值6211。

因此从上面可以看出,这三个函数使用的字符集均是unicode,不同的只是escape直接对unicode编码成16进制,而encodeURI和encodeURIComponent则是把unicode编码成utf-8而已。

本站文章内容,部分来自于互联网,若侵犯了您的权益,请致邮件chuanghui423#sohu.com(请将#换为@)联系,我们会尽快核实后删除。
Copyright © 2006-2023 DBMNG.COM All Rights Reserved. Powered by DEVSOARTECH            豫ICP备11002312号-2

豫公网安备 41010502002439号