1. 程式人生 > >encodeURIComponent 和 encodeURI 和 escape 簡要彙總

encodeURIComponent 和 encodeURI 和 escape 簡要彙總

前言: 不在贅述基本用法,這裡只記錄三者在實際生產中的使用場景。

相同點:三者接受的引數都是string型別,escape  在es3中不推薦使用,但是還是有自己的使用場景。
三者的反解碼對應是: decodeURIComponent 、decodeURI、 unescape。

(1):  escape() 除了 ASCII 字母、數字和特定的符號外,對傳進來的字串全部進行轉義編碼,因此如果想對URL編碼,最好不要使用此方法。因此我們界定它的  使用場景最好是單純對非URI的string需要編碼的時候使用它。但是encodeURIComponent()也可以使用它會更加完美,個人之見吧。
eg:

 http%3A//www.w3school.com.cn     -->      %3F%21%3D%28%29%23%25%26


(2):  encodeURI()  使用場景編碼整個URI,因為URI中的合法字元都不會被編碼轉換

該方法的目的是對 URI 進行完整的編碼,因此對以下在 URI 中具有特殊含義的 ASCII 標點符號,encodeURI() 函式是不會進行轉義的:;/?:@&=+$,#

提示:如果 URI 元件中含有分隔符,比如 ? 和 #,則應當使用 encodeURIComponent() 方法分別對各元件進行編碼。

eg :

http://www.w3school.com.cn/My first/

 -->   http://www.w3school.com.cn/My%20first/

http://www.w3school.com.cn   ->   http://www.w3school.com.cn

,/?:@&=+$#                   ->   ,/?:@&=+$#

(3):  encodeURIComponent()  方法在編碼單個 URIComponent(指請求參 數)應當是最常用的,它可以將引數中的中文、特殊字元進行轉義,而不會影響整個URL。

 encodeURIComponent() 函式可把字串作為 URI 元件進行編碼。

使用場景需要對URI的某個引數(區域性的引數)比如是search進行編碼。

eg:  

http://www.w3school.com.cn   -> http%3A%2F%2Fwww.w3school.com.cn

http://www.w3school.com.cn/p 1/ ->  http%3A%2F%2Fwww.w3school.com.cn%2Fp%201%2F

,/?:@&=+$#                     ->  %2C%2F%3F%3A%40%26%3D%2B%24%23

總結: 一般使用1、3對區域性或者單個的字元進行編碼,可以看做3是1的升級版本吧( 其實一樣,只不過es3放棄了前者,就像找了個小老婆,不喜歡正室一樣 )。 2可以對整個URL進行編碼,編碼的目的就是防止亂碼。