如何在JavaScript中保留当前地址获取的URL不被编码?
解决URL参数替换后自动编码的问题
你遇到的编码问题是因为URLSearchParams.set()会自动对参数值进行URL编码,这是标准行为,但如果需要保留原始的斜杠/不被编码,就得绕过这个自动编码机制,直接操作URL字符串。
修改后的代码
$(function () { $("a[href*='redirect']").each(function () { let href = $(this).attr("href"); // 获取当前URL,移除协议部分和末尾斜杠 const current_url = window.location.href.split("://")[1].replace(/\/$/, ""); // 正则匹配并替换redirect参数的值 href = href.replace(/([?&])redirect=[^&]+/, `$1redirect=${current_url}`); $(this).attr("href", href); }); });
代码说明
- 直接通过字符串正则替换的方式定位
redirect参数,替换其值为处理后的当前URL,避免了URLSearchParams的自动编码逻辑。 - 正则表达式
([?&])redirect=[^&]+可以匹配两种情况:?redirect=xxx(参数在查询字符串开头)&redirect=xxx(参数在查询字符串中间)
- 处理后的当前URL会直接替换原参数值,斜杠
/保持原始形式,不会被转成%2F。
验证结果
当当前访问地址为https://www.example.com/about/dog时,目标链接会被修改为:https://app.example.com/?redirect=www.example.com/about/dog
完全符合你的期望结果。
注意:严格来说,URL查询参数的值应该进行URL编码,但如果你的后端服务能够正确解析未编码的斜杠,这个方案可以正常工作。
内容的提问来源于stack exchange,提问作者Anthony
相关产品推荐
相关产品推荐

