You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 07:27:23