前端页面地址栏传参转义问题

在URL中,一些特殊字符如空格、中文、特殊符号等是不能直接出现的。如果不对这些字符进行转义,浏览器在解析URL时可能会出现错误,导致页面加载失败或参数解析错误。

1.特殊字符如下表

字符URL编码值
空格%20
双引号%22
井号%23
美元符号%24
百分号%25
和号%26
单引号%27
左括号%28
右括号%29
星号%2A
加号%2B
逗号%2C
正斜杠%2F
冒号%3A
分号%3B
小于号%3C
等号%3D
大于号%3E
问号%3F
@符号%40
反斜杠%5C
竖线%7C

2.处理方法

传参前对参数进行处理。使用JavaScript的 encodeURIComponent()函数对参数值进行编码。例如:

let paramValue = "用户名 张三";
let encodedValue = encodeURIComponent(paramValue);
console.log(encodedValue); // 输出:%E7%94%A8%E6%88%B7%E5%90%8D%20%E5%BC%A0%E4%B8%89

在接到数据后,再使用JavaScript中的decodeURIComponent()函数进行解码,如下:

let encodedValue = "%E7%94%A8%E6%88%B7%E5%90%8D%20%E5%BC%A0%E4%B8%89";
let decodedValue = decodeURIComponent(encodedValue);
console.log(decodedValue); // 输出:用户名 张三

3.我遇到的问题

需求是:地址栏传参,参数是被base64编码后的

问题:base64编码后会出现 + / = 特殊字符,在地址栏进行了转义

解决办法: base64编码后的串用encodeURIComponent()函数进行再次编码,接到参数用decodeURIComponent()函数进行解码后得到base64串,再进行base64解码。

注意:原始数据中包含中文,如果使用atob()函数对其进行解码,则需要确保将解码后的二进制数据正确转换为UTF-8字符串。例如:

// 假设这是一个Base64编码的字符串,表示 "你好,世界!"
let base64EncodedString = "5L2g5aW977yM5LiW55WM77yB";
// 使用 atob() 解码
let decodedBinaryString = atob(base64EncodedString);
// 将解码后的二进制字符串转换为UTF-8字符串
// 在现代浏览器中,可以直接使用 TextDecoder 来处理
let decodedString = new TextDecoder("utf-8").decode(Uint8Array.from(decodedBinaryString, c => c.charCodeAt(0)));
console.log(decodedString); // 输出: "你好,世界!"

4.发现问题

在寻找解法的过程中(与以上无关),发现一个现象。+ 加号放在不同的网址后面会有不同的转义。一般是以下三种:

1)变为 %2B ,这个忘了哪个网址了

2)变为 %20,比如elmentUI网址后拼接

3)还是 + ,比如在baidu.com后拼接

第二种情况就会出现加号和空格转义相同了(目前也没遇到过这样的数据,只是尝试),目前没找到具体原因,也许和具体项目有关。大家可以一起讨论。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值