URL Safe base64 与 base64相互转换

为什么需要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
  }

你可能感兴趣的:(Javascript,base64,js,正则表达式,字符串)