如何拆分URL字符串中的查询参数并使用window.btoa()编码
完善查询参数编码跳转函数
这里是完善后的函数实现,核心逻辑是拆分URL的路径与查询参数部分,对参数部分进行window.btoa()编码后重新拼接,再打开新页面:
function test(path) { const href = window.location.origin + path; if (href.includes('?')) { // 拆分路径和查询参数部分 const [baseUrl, params] = href.split('?'); // 对查询参数进行Base64编码 const encodedParams = window.btoa(params); // 拼接新的URL const newHref = `${baseUrl}?${encodedParams}`; // 打开编码后的URL window.open(newHref, '_blank', 'no-referer'); // 注意:如果原参数包含非ASCII字符,btoa会报错,可先转成UTF-8编码的Base64,比如用encodeURIComponent处理后再btoa // 可选处理非ASCII参数的方式:const encodedParams = window.btoa(encodeURIComponent(params)); return; } // 无查询参数时直接跳转 window.open(href, '_blank', 'no-referer'); }
关键逻辑说明
- 使用
split('?')将URL拆分为基础路径(baseUrl)和查询参数串(params)两部分 - 调用
window.btoa()对完整的查询参数串进行Base64编码 - 重新拼接成包含编码后参数的新URL,再调用
window.open打开 - 添加
return避免后续执行无参数的跳转逻辑
注意事项
window.btoa()仅支持编码ASCII字符,如果你的查询参数中包含中文、emoji这类非ASCII字符,直接调用会抛出错误。这种情况下可以先通过encodeURIComponent()将参数转成ASCII格式,再进行编码:
const encodedParams = window.btoa(encodeURIComponent(params));
如果需要解码对应参数,要先用atob()解码,再用decodeURIComponent()还原原参数。
内容的提问来源于stack exchange,提问作者lrr59
相关产品推荐
相关产品推荐

