1. escape 和 unescape
escape()不能直接用於URL編碼,它的真正作用是返回一個字符的Unicode編碼值。
采用unicode字符集對指定的字符串除0-255以外進行編碼。所有的空格符、標點符號、特殊字符以及更多有聯系非ASCII字符都將被轉化成%xx格式的字符編碼(xx等於該字符在字符集表里面的編碼的16進制數字)。比如,空格符對應的編碼是%20。
escape不編碼字符有69個:*,+,-,.,/,@,_,0-9,a-z,A-Z。
escape()函數用於js對字符串進行編碼,不常用。
編碼:escape('http://www.baidu.com?name=zhang@xiao@jie&order=1')
結果:"http%3A//www.baidu.com%3Fname%3Dzhang@xiao@jie%26order%3D1"
escape('張')
結果:"%u5F20"
解碼:unescape("http%3A//www.baidu.com%3Fname%3Dzhang@xiao@jie%26order%3D1")
結果:"http://www.baidu.com?name=zhang@xiao@jie&order=1"
unescape("%u5F20")
結果:"張"
2. encodeURI 和 decodeURI
把URI字符串采用UTF-8編碼格式轉化成escape各式的字符串。
encodeURI不編碼字符有82個:!,#,$,&,',(,),*,+,,,-,.,/,:,;,=,?,@,_,~,0-9,a-z,A-Z
encodeURI()用於整個url編碼
編碼:encodeURI('http://www.baidu.com?name=zhang@xiao@jie&order=1')
結果:"http://www.baidu.com?name=zhang@xiao@jie&order=1"
解碼:decodeURI("http%3A//www.baidu.com%3Fname%3Dzhang@xiao@jie%26order%3D1")
結果:"http%3A//www.baidu.com%3Fname%3Dzhang@xiao@jie%26order%3D1"
3. encodeURIComponent 和 decodeURIComponent
與encodeURI()的區別是,它用於對URL的組成部分進行個別編碼,而不用於對整個URL進行編碼。
因此,"; / ? : @ & = + $ , #",這些在encodeURI()中不被編碼的符號,在encodeURIComponent()中統統會被編碼。至於具體的編碼方法,兩者是一樣。把URI字符串采用UTF-8編碼格式轉化成escape格式的字符串。
encodeURIComponent() 用於參數的傳遞,參數包含特殊字符可能會造成間斷。
編碼:encodeURIComponent('http://www.baidu.com?name=zhang@xiao@jie&order=1')
結果:"http%3A%2F%2Fwww.baidu.com%3Fname%3Dzhang%40xiao%40jie%26order%3D1"
解碼:decodeURIComponent("http%3A%2F%2Fwww.baidu.com%3Fname%3Dzhang%40xiao%40jie%26order%3D1")
"http://www.baidu.com?name=zhang@xiao@jie&order=1"
總結:
escape()不能直接用於URL編碼,它的真正作用是返回一個字符的Unicode編碼值。比如"春節"的返回結果是%u6625%u8282,,escape()不對"+"編碼
主要用於漢字編碼,現在已經不提倡使用。
encodeURI()是Javascript中真正用來對URL編碼的函數。
編碼整個url地址,但對特殊含義的符號"; / ? : @ & = + $ , #",也不進行編碼。對應的解碼函數是:decodeURI()。
encodeURIComponent()
能編碼"; / ? : @ & = + $ , #"這些特殊字符。對應的解碼函數是decodeURIComponent()。
我想要傳遞帶&符號的網址,所以用encodeURIComponent()