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()