Outlook破坏含%字符的HTML链接 跳转时%0D被删除如何解决?
问题原因
该问题由Outlook的Safe Links(安全链接)防护机制导致:%0D是ASCII回车符的URL编码,Outlook扫描邮件链接时会判定这类控制字符为可疑风险字符,重写跳转链接时会直接过滤掉该字符,最终导致跳转路径缺失关键字符失效。
你之前尝试直接将%替换为%25后URL失效的原因是:直接在原始href中替换后,Outlook不会对重写后的链接做二次解码,Bitbucket服务端收到的是未被还原的%250D字符,不符合预期的参数格式。
可行解决方案
- 方案1:使用短链中转跳转
借助企业内部短链服务或者合规的短链工具,将完整的包含%0D的目标链接设置为短链的跳转终点,邮件内直接插入短链作为跳转地址即可。Safe Links仅会保留短链本身不会解析后端跳转目标,用户点击后由短链服务完成到正确目标地址的跳转,完全避开%0D被过滤的问题。 - 方案2:自建中间跳转页处理
在你可控的域名下新增一个跳转页面,比如https://your-domain.com/redirect.html,将原始目标URL完整编码后作为参数传给跳转页,示例链接写法:
跳转页内通过JS读取<a href="https://your-domain.com/redirect.html?target=https%3A%2F%2Fbitbucket.org%2Fblah%2Fblue%2Fbranches%2Fcompare%2F0.6.0%250D0.5.0%23diff">Show diffs</a>target参数,做两次URI解码后再触发跳转即可得到完整的正确链接:const target = decodeURIComponent(decodeURIComponent(new URLSearchParams(location.search).get('target'))) location.href = target - 方案3:申请域名白名单
联系企业IT部门或者邮件服务管理员,将bitbucket.org加入Outlook Safe Links的白名单,白名单内域名的链接不会被Outlook重写,所有字符都会原样保留。
内容的提问来源于stack exchange,提问作者ninhenzo64
相关产品推荐
相关产品推荐

