js對通過url傳值轉碼問題


      今天遇到一個問題,跨域調其他系統接口,需要傳一個回調地址過去,由於是單頁面應用,回調地址中存在特殊字符‘#’和‘?’,想着用字符轉碼在傳過去,於是就想到了js原生的3個常用的轉碼(解碼)函數:escape(unescape),encodeURI(decodeURI),encodeURIComponent(decodeURIComponent)。

  escape(),不會對 ASCII 字母和數字進行編碼,也不會對下面這些 ASCII 標點符號進行編碼: * @ - _ + . / 。其他所有的字符都會被轉義序列替換。

  encodeURI(),不會對 ASCII 字母和數字進行編碼,也不會對這些 ASCII 標點符號進行編碼: - _ . ! ~ * ' ( ) ,它的目的是對 URI 進行完整的編碼,因此對以下在 URI 中具有特殊含義的 ASCII 標點符號,encodeURI() 函數是不會進行轉義的:;/?:@&=+$,#(地址欄中如果有#和?,並且需要用來算簽名的時候就不要用這個方法了)

  encodeURIComponent(),不會對 ASCII 字母和數字進行編碼,也不會對這些 ASCII 標點符號進行編碼: - _ . ! ~ * ' ( ),其他字符(比如 :;/?:@&=+$,# 這些用於分隔 URI 組件的標點符號),都是由一個或多個十六進制的轉義序列替換的。

例如,我的回調地址是:http://www.liantiao.com/#/orderDetail/T20160406201024825,把這個回調地址作為參數跨域請求其他api接口,對方需要對比參數簽名的,所以,就要把#等特殊字符進行轉義,這里我用了encodeURIComponent()函數,轉義之后是:"http%3A%2F%2Fwww.liantiao.com%2F%23%2ForderDetail%2FT20160406201024825"

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM