escape(), encodeURI()和encodeURIComponent()是在Javascript中用於編碼字符串的三個經常使用的方法,而他們之間的異同卻困擾了不少的Javascript初學者,在這裏對這三個方法詳細地分析與比較一下。html escape() 方法web MSDN JScript Reference中如是說:服務器 The escape method returns a string value (in Unicode format) that contains the contents of [the argument]. All spaces, punctuation, accented characters, and any other non-ASCII characters are replaced with %xx encoding, where xx is equivalent to the hexadecimal number representing the character. For example, a space is returned as " ."ide 譯:escape方法以Unicode格式返回一個包含傳入參數內容的string類型的值。 Escape方法會將傳入參數中全部的空格、標點符號、重音字符以及其它任何非ASCII字符替換爲%xx的編碼形式,其中xx與其所表示的字符的16進制數表示形式相同。如空格字符的16進製表示形式爲0x20,則此時xx應爲20,即escape(‘ ’) 返回「 」。ui Mozilla Developer Core Javascript Guide中如是說:編碼 The escape and functions let you encode and decode strings. The escape function returns the hexadecimal encoding of an argument in the ISO Latin character set. The function returns the ASCII string for the specified hexadecimal encoding value.spa 譯:escape和方法可以幫助你編碼和解碼字符串。escape方法對於ISO Latin字符集中的字符組成的參數,返回其16進制編碼。相對應的,方法則能將16進制編碼形式的參數轉化成爲其ASCII碼形式。code encodeURI()方法component MSDN JScript Reference中如是說:orm The encodeURI method returns an encoded URI. If you pass the result to decodeURI, the original string is returned. The encodeURI method does not encode the following characters: ":", "/", ";", and "?". Use encodeURIComponent to encode these characters. 譯:encodeURI方法返回一個通過編碼的URI。若是將encodeURI方法的編碼結果傳遞給decodeURI方法做參數,則能獲得原始的未編碼的字符串。須要注意到是encodeURI方法不編碼以下字符":", "/", ";", and "?"。若是想要編碼這些字符,請使用encodeURIComponent方法。 Mozilla Developer Core Javascript Guide中如是說: Encodes a Uniform Resource Identifier (URI) by replacing each instance of certain characters by one, two, or three escape sequences representing the UTF-8 encoding of the character. 譯:經過將每一個屬於特定的字符集合的字符替換爲一個、兩個或者三個(爲何是「一個、兩個或者三個」本人也沒有搞懂,望高人賜教)使用UTF-8編碼來表示這個字符的escape序列來編碼一個URI。如 ~!@#$%^&*(){}[]=:/,;?+\''"\\ 將被替換爲 ~!@#$%^&*(){}[]=:/,;?+''"\ encodeURIComponent()方法 MSDN JScript Reference中如是說: The encodeURIComponent method returns an encoded URI. If you pass the result to decodeURIComponent, the original string is returned. Because the encodeURIComponent method encodes all characters, be careful if the string represents a path such as /folder1/folder2/default.html. The slash characters will be encoded and will not be valid if sent as a request to a web server. Use the encodeURI method if the string contains more than a single URI component. 譯:encodeURIComponent方法返回一個編碼過的URI。若是將encodeURIComponent方法的編碼結果傳遞給encodeURIComponent方法做參數,則能獲得原始的未編碼的字符串。由於encodeURIComponent方法會編碼全部的字符,因此若是待編碼的字符串是用來表示一個路徑(如/dir1/dir2/index.htm)時,就必定要當心使用了。‘/’符號會被其編碼以後,將再也不是一個有效的路徑標識符,因此不能被web服務器正確地識別。當字符串包含一個單獨的URI component(指?後面的請求參數)的時候,請使用此方法。 Mozilla Developer Core Javascript Guide中如是說: Encodes a Uniform Resource Identifier (URI) component by replacing each instance of certaincharacters by one, two, or three escape sequences representing the UTF-8 encoding of the character. 譯:經過將每一個屬於特定的字符集合的字符替換爲一個、兩個或者三個(爲何是「一個、兩個或者三個」本人也沒有搞懂,望高人賜教)使用UTF-8編碼來表示這個字符的escape序列來編碼一個URIComponent。 有什麼區別?什麼時候使用?
相對於使用escape方法,使用encodeURI方法會顯得更專業一些。當你須要編碼一整個URI的時候,你能夠使用此方法,由於URI中的合法字符都不會被編碼轉換。須要注意到是字符’也是URI中的合法字符,因此也不會被編碼轉換。 encodeURIComponent方法在編碼單個URIComponent(指請求參數)應當是最經常使用的。須要注意到是字符’也是URI中的合法字符,因此也不會被編碼轉換。 |