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
  }
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值