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