亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

求一段JavaScript代碼的解釋:有關URL編碼

求一段JavaScript代碼的解釋:有關URL編碼

函數式編程 2019-03-29 22:10:17
在js中,可以用window.btoa(str)/window.atob(str)對字符串進行base64編解碼,但是傳入的字符串不支持非ASCII。所以有人寫了對應Base64編解碼的函數:functionb64Encode(str){returnwindow.btoa(unescape(encodeURIComponent(str)));}functionb64Decode(str){returndecodeURIComponent(escape(window.atob(str)));}問題是:對于b64Encode函數為什么先要用encodeURIComponent,再用unescape?先用escape再用decodeURIComponent不行嗎?為什么是這個順序。另外還有個問題,escape函數和encodeURIComponent或encodeURI有什么重要的不同嗎,為什么要廢除escape函數。文檔上說的不清不楚的,求解答。
查看完整描述

2 回答

?
動漫人物

TA貢獻1815條經驗 獲得超10個贊

首先推薦閱讀關于URL編碼,它介紹了關于這四個編碼函數的主要區別。
MDN上有相應的解釋,也已經提供了具體的解決方案,所以順序是可以顛倒的。
functionutf8_to_b64(str){
returnwindow.btoa(encodeURIComponent(escape(str)));
}
functionb64_to_utf8(str){
returnunescape(decodeURIComponent(window.atob(str)));
}
encodeURIComponent在ECMAScript上定義如下:
TheencodeURIComponentfunctioncomputesanewversionofaURIinwhicheachinstanceofcertaincharactersisreplacedbyone,twoorthreeescapesequencesrepresentingtheUTF-8encodingofthecharacter.
由此可以看出encodeURIComponent是用UTF-8編碼的。
而escape是不能直接用于URL編碼,它的真正作用是返回一個字符的Unicode編碼值。
                            
查看完整回答
反對 回復 2019-03-29
?
PIPIONE

TA貢獻1829條經驗 獲得超9個贊

escape它不會對ASCII字母和數字進行編碼,也不會對下面這些ASCII標點符號進行編碼:-_.!~'()encodeURI是utf-8的編碼,但是不能解析特殊的字符,列如@$encodeURIComponent是utf-8的編碼,可以解析特殊的字符@$
                            
查看完整回答
反對 回復 2019-03-29
  • 2 回答
  • 0 關注
  • 486 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號