此时经过浏览器访问时,链接中特殊字符“+”被 转义 会被为%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会转成 空格

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

我们会发现利用 decodeURIComponent解码时,%20会被我们解码成' '(空格),从而导致解密失败,提取不到我们想要的参数;当项目需要,有些统一认证/单点登录登录成功后,会给我们的登录地址后面加上认证参数,需要我们提取这个参数去做登录处理。将拿到的地址链接中的%20全部替换成'+',然后进行decodeURIComponent解码;按照w3c转码标准,空格应该被转译成%20,+号被转义成%2B。因为业务发生在内网机无法截图,下图 借图 其他博主。(如有更好的解决办法还请多多指教) 本人Android开发,某一天,被告知自己程序URL的 编码 ,空格被转换成了+,导致对方识别不成空格。当然我清楚的记得我是使用了URLEncoder的 编码 和解码方法,并无其他操作,而且这可是JDK提供的方法,因此我直接进行了测试URLEncoder.encode("张三 妈妈","UTF-8") 其输出结果为:%...
当用作单目操作符的时候,+操作符不会对Number类型产生影响。但如果应用在字符串类型上,会将其转换为数字: var a = 25;a =+ a; //对a值没有影响console.log(a); //25var b = "70"; console.log(typeof b); //String b =+ b; //将字符串转换为数字
如果在二元运算 的其 一方是字符串类型的数据,则就会"+"就会进行字符串得拼接操作。 如果其 一方的操作数是数组或者对象,则会使用toPrimitive进行抽象转换,先转化为字符串类型,如果不 行,则再转化为数字类型的数据。 对于除了加法运算的其他运算,都会先转化为数字类型。 console.log("10" + " 20 ") //转化为字符串 10 20 console.log("10" / " 20 ") //转化为数字类型 0.5 都表示可以空格,区别在于使用场景不同 % 20 用在 URL 的路径部分,如 xxx.com/% 20 abc/haha.htm,而如果写成 xxx.com/+abc/haha.htm,是不会正确识别的,直接空格更是不行(平时浏览器都替我们转换了),路径部分 % 20 表示空格 package main import ( "github.com/gin-gonic/gin" // 测试代码,路径带空格 func main() { a := gin.Default() a.GET("/