为什么需要base64?
ASCII码一共规定了128个字符的编码,这128个符号,范围在[0,127]之间.
其中,[0,31],及127, 33个属于不可打印的控制字符.
在电子邮件传输信息时,有些邮件网关会把[0,31]这些控制字符给悄悄清除.
还有的早期程序,收到[128,255]之间的国际字符时,甚至会发生错误.
如何在不同邮件网关之间安全的传输控制字符,国际字符,甚至二进制文件?
于是作为MIME多媒体电子邮件标准的一部分—base64被开发出来.
什么是url_safe base64编码?
在上面的base64传统编码中会出现+, /两个会被url直接转义的符号,
因此如果希望通过url传输这些编码字符串,
我们需要先做传base64编码,随后将+和/分别替换为- _两个字符,在接收端则做相反的动作解码
JS转换方法
/**
* 解码 URL Safe base64 -> base64
* @description: URL Safe base64
* '-' -> '+'
* '_' -> '/'
* 字符串长度%4,补'='
* @param {type} string
* @return: Base64 string;
*/
function urlSafeBase64Decode(base64Str) {
if (!base64Str) return;
let safeStr = base64Str.replace(/-/g, '+').replace(/_/g, '/');
let num = safeStr.length % 4;
return safeStr + '===='.substring(0, num);
}
/**
* 编码 base64 -> URL Safe base64
* @description: base64
* '+' -> '-'
* '/' -> '_'
* '=' -> ''
* @param {type} string
* @return: URL Safe base64 string;
*/
function urlSateBase64Encode(base64Str) {
if (!base64Str) return;
let safeStr = base64Str.replace(/\+/g, '-').replace(/\//g, '_').replace(/\=/g, '’);
// const UriSafe = (src: string) => src.replace(/[+\/]/g, (m0) => m0 == '+' ? '-' : '_').replace(/=+$/m, ‘');
return safeStr
}
