瀏覽器編碼函數(shù)escape(),encodeURI(),encodeURIComponent()的區(qū)別
1、escape()
escape()是js編碼函數(shù)中最古老的一個。實際上,escape()不能直接用于URL編碼,它的真正作用是返回一個字符的Unicode編碼值。比如“你好”的返回結(jié)果是"%u4F60%u597D"。無論網(wǎng)頁的原始編碼是什么,一旦被Javascript編碼,就都變?yōu)閡nicode字符。也就是說,Javascipt函數(shù)的輸入和輸出,默認(rèn)都是Unicode字符。
javascript:escape("你好");
//輸出 "%u4F60%u597D"
解碼
javascript:unescape("%u4F60%u597D");
//輸出 "你好"
2、encodeURI()
encodeURI是對整個URL進行編碼,因此除了常見的符號以外,對其他一些在網(wǎng)址中有特殊含義的符號“; / ? : @ & = + $ , #”,也不進行編碼。編碼后,它輸出符號的utf-8形式,并且在每個字節(jié)前加上%,需要注意的是,它不對單引號’編碼。
encodeURI("https://mp.csdn.net?=k=hello world");
//輸出 "https://mp.csdn.net?=k=hello%20world"
它對應(yīng)的解碼函數(shù)是decodeURI()。
decodeURI("https%3A//mp.csdn.net/mdeditor%23Markdown_2");
//輸出 "https://mp.csdn.net?=k=hello world"
3、encodeURIComponent()
與encodeURI()的區(qū)別是,它用于對URL的組成部分進行個別編碼,而不用于對整個URL進行編碼。因此,“; / ? : @ & = + $ , #”,這些在encodeURI()中不被編碼的符號,在encodeURIComponent()中統(tǒng)統(tǒng)會被編碼,所以encodeURIComponent()相比encodeURI()要更加徹底。至于具體的編碼方法,兩者是一樣。
encodeURIComponent("https://mp.csdn.net?=k=hello world");
//輸出 "https%3A%2F%2Fmp.csdn.net%3F%3Dk%3Dhello%20world"
它對應(yīng)的解碼函數(shù)是decodeURIComponent()。
decodeURIComponent("https%3A%2F%2Fmp.csdn.net%3F%3Dk%3Dhello%20world");
//輸出 "https://mp.csdn.net?=k=hello world"