项目中发现路由直接用字符串做参数有个坑,拼接的字符串有可能会跟路由产生冲突,比如用字符串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。
传参时加密,接收参数的解密方式也很简单,把上面加密字符串的顺序反过来一层层解开即可拿到原始数据。