前言
更新模板的时候发现了客户提上来的一个问题,下单信息存在%的时候会出现 URIError: URI malformed
的错误,这个就是对url
解码的时候出现问题,因为在传参的时候进行过 encodeURIComponent
,所以汉字等就会编码掉,现在突然多了一个 %
所以肯定就报错了。
正文
问题复现:
假设现在有一个url
的query
参数为:{"gid":110,"num":1}
进行encodeURIComponent
过后得到的:'%7B%22gid%22%3A110%2C%22num%22%3A1%7D'
这个时候使用decodeURIComponent
是没有问题的
但是如果我的参数为:{"gid":110,"num":1,"name":"100%"}
,再去解码的时候就会出现报错
解决
只需要将存在%字符串的内容替换成为%25
const toPercent25 = (URL) => {
if(URI.indexOf('%') > -1) {
return URI.replace(/%/g,'%25')
}else{
return URI;
}
}
由于我是解码前编码过,所以在编码的时候先执行函数替换掉,然后在解码前时候再执行一遍函数