为了账号安全,请及时绑定邮箱和手机立即绑定

求一段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 关注
  • 468 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信