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 -> 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進行編碼,編碼的目的就是防止亂碼。