一些名词
utf-8 是一种编码方式 (character encoding) ,是 Unicode 标准中 UCS 字符集的一种编码方式
http://en.wikipedia.org/wiki/Percent-encoding
它有两部分字符组成:保留字符和非保留字符。
保留字符:! * ‘ ( ) ; : @ & = + $ , / ? % # [ ]
保留字符,是有特殊意义的,如果在不代表那些特殊意义而代表原意的时候出现,必须经过编码。例如1 ==> %21
非保留字符:A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
a b c d e f g h i j k l m n o p q r s t u v w x y z
0 1 2 3 4 5 6 7 8 9 – _ . ~
javascript的内置函数 encodeURI、decodeURI、encodeURIComponent、decodeURIComponent 就是进行的 Percent Encode,只是在对待 : / ; ?等特殊字符的时候有区别。
JavaScript:escape, encodeURIComponent和encodeURI
escape() will not encode: @ * / + encodeURI() will not encode: ~ ! @ # $ & * ( ) = : / , ; ? + ' encodeURIComponent() will not encode: ~ ! * ( ) '
escape('一') == '%u04BB' encodeURI('一') == '%u04BB' encodeURIComponent('一') == '%u04BB' escape('康') == '%uFFFD%uFFFD' encodeURI('康') == '%EF%BF%BD%EF%BF%BD' encodeURIComponent('康') == '%EF%BF%BD%EF%BF%BD'
escape的返回值是非标准Pecent-encoding, 现在已经没有标准支持,建议少用
主要区别:encodeURIComponent比encodeURI转码的字符要多一部分,
包括:@ # $ & = : / , ; ? +
之所以有上面两个不同的函数,是因为我们在写JS代码的时候对URI进行两种不同的编码处理需求。
encodeURI可以用来对完整的URI字符串进行编码处理。
而encodeURIComponent可以对URI中一个部分进行编码,从而让这一部分可以包含一些URI保留字符。
参考:javascript encodeURI和encodeURIComponent的比较