[as3.0]encodeURI与encodeURIComponent
函数encodeURI与encodeURIComponent目的都是对字符串进行编码,除一小部分字符外都会按照utf-8序列进行编码。那么二者的区别在哪里呢?从名字上看后者多一个Component,所以后者是专门对URI中的Component进行编码的。所谓URI Component是位于component分隔符(: / ; 和 ? )中间的文本,比如对于URI:http://www.4nothing.net/blog/?p=49,其中的”http”,”www.4nothing.net”,”blog”,”p=49″就是URI Component.
另外需要注意的一点是encodeURI不会对(; / ? : @ & = + $ , #)进行编码,但是encodeURIComponent却把这些字符当作正常的文本进行编码。
(; / ? : @ & = + $ , #)这些字符都是特殊的URI字符标记,比如#用于锚标记,&用于分割传递的多个变量,但是有时候这些字符可能不用来当作正常的字符传递,比如想传递的变量中就包含这&字符,如果不对它编码的话就会被浏览器当作变量分隔符了。
总结下就是encodeURI用于编码整个URI字符串,而encodeURIComponent只是用来编码URI字符串中的一个URI组件。对完整的URI字符串使用encodeURIComponent无意义,比如http://www.4nothing.net/blog/?p=49使用encodeURIComponent后的字符串是http%3A%2F%2Fwww.4nothing.net%2Fblog%3Fp%3D49,浏览器无法识别这个地址。

Leave a Reply