路由参数加密-base64 加解密

878 阅读1分钟

项目中发现路由直接用字符串做参数有个坑,拼接的字符串有可能会跟路由产生冲突,比如用字符串a/b做参数,这个时候路由就会有问题。

解决这个问题有两种方法,改为 query 传参,另一种就是参数加密,参数加密的方法如下。

function encodeStr(str) {
  return  btoa(encodeURIComponent(str))
}
function decodeStr(str) {
  return  decodeURIComponent(atob(str))
}

这里为什么搞这么复杂呢,直接 btoa 转为 base64 不行吗?btoa只能转数字字母和几个特殊字符,中文字符就报错了,encodeURIComponent 可以编码 utf-8 字符,这里可以先用encodeURIComponent 编码一下,再转 base64。

传参时加密,接收参数的解密方式也很简单,把上面加密字符串的顺序反过来一层层解开即可拿到原始数据。