js中對URL進行轉碼與解碼

想多了,很累。發表於2018-09-13

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

 

相關文章