2026-01-24 01:36:02
在Vue中处理URL查询参数的特殊字符转义问题,需结合后端编码策略和前端路由版本特性进行针对性处理,具体方案如下:
一、后端处理方案(推荐)核心方法:后端生成Token时采用base64url编码替代标准Base64。
根据Vue Router版本差异,需采用不同策略:
1. Vue Router 3.x 处理流程获取参数:通过URLSearchParams或this.$route.query获取原始值(已解码)。
手动编码:使用encodeURIComponent对参数二次编码。
// 通过URLSearchParams获取const searchParams = new URLSearchParams(window.location.search);const rawKey = searchParams.get('key'); // 例如 "ze9 ticzsrej..."(+被转义为空格)const safeKey = encodeURIComponent(rawKey); // 编码为"ze9%20ticzsrej..."// 通过Vue Router获取(同样需编码)const safeKey = encodeURIComponent(this.$route.query.key);直接使用:若参数已通过base64url编码,可直接从$route.query读取。
路径操作编码:使用push、replace等方法时,需对路径参数编码。
// 获取参数(无需编码)const key = this.$route.query.key; // 例如 "ze9+ticzsrej..."// 跳转时编码路径this.$router.push({ path: `/target?key=${encodeURIComponent(key)}`});编码范围:
仅对需要传递到后端的参数编码,避免过度处理。
路径参数(如/user/:id)需单独编码,查询参数(?key=value)按上述方案处理。
解码时机:
后端接收数据后,需用base64url.decode或对应语言方法解码。
前端显示时,若参数需展示,可用decodeURIComponent还原(但通常建议后端返回已处理数据)。
版本兼容性:
通过package.json确认Vue Router版本,避免误用3.x方法处理4.x路由。