前端链接地址中‘+‘被编码为%20(本为%2B)问题

当项目需要,有些统一认证/单点登录登录成功后,会给我们的登录地址后面加上认证参数,需要我们提取这个参数去做登录处理。

因为业务发生在内网机无法截图,下图借图其他博主。

 此时经过浏览器访问时,链接中特殊字符“+”被转义会被为%20。

按照w3c转码标准,空格应该被转译成%20,+号被转义成%2B。

因为业务发生在内网机无法截图,下图 借图 其他博主。

 我们会发现利用 decodeURIComponent解码时,%20会被我们解码成' '(空格),从而导致解密失败,提取不到我们想要的参数;

解决办法:

将拿到的地址链接中的%20全部替换成'+',然后进行decodeURIComponent解码;

//从浏览器url地址提取?后面的参数,结果为 data。
        let data = {};
        let src = window.location.search
        let index = src.indexOf("?");
        let dataStr = src.substring(src.indexOf("?") + 1);
        let dataArray = dataStr.split("&");
        for (let i = 0; i < dataArray.length; i++) {
          let param = dataArray[i].split("=");
          data[param[0]] = param[1];
        }
        console.log('登录成功后返回的原参数', data)

        // 修复浏览器url个别转码出错问题。
        const strData1 = data.SSIAuth.replace(/%20/g, "%2B")
        //由于url中返回参数的 +号被转义成 %20,其实应该是 %2B,后台再次反转义 %20会转成 空格
        const strData2 = data.SSISign.replace(/%20/g, "%2B")
        //由于url中返回参数的 +号被转义成 %20,其实应该是 %2B,后台再次反转义 %20会转成 空格

(如有更好的解决办法还请多多指教)

猜你喜欢

转载自blog.csdn.net/m0_46551050/article/details/127364430
今日推荐