如何阻止JavaScript对URL编码?pushState引发URL异常编码问题
解决pushState导致URL出现%E2%80%8C编码的问题
你遇到的%E2%80%8C是**零宽非连接符(ZWNJ)**的URL编码,这个字符肉眼不可见,但确实藏在你的name变量里——trim()只能去除空格、换行这类常规空白字符,对这种零宽特殊字符完全不起作用。
解决办法
修改name的处理逻辑,在trim()之后再用正则表达式移除所有零宽类特殊字符:
// 先清除常规空白,再移除各类零宽隐藏字符 name = name.trim().replace(/[\u200B-\u200D\uFEFF]/g, ''); const nextState = { additionalInformation: name }; window.history.pushState(nextState, "", my_domain()+"/brands/" + name);
这段正则会匹配并清除以下隐藏字符:
\u200B:零宽空格\u200C:零宽非连接符(就是导致你URL异常的元凶)\u200D:零宽连接符\uFEFF:字节顺序标记
处理后name里就不会有这些隐形字符,pushState生成的URL就能和预期一致了。
内容的提问来源于stack exchange,提问作者saleh
相关产品推荐
相关产品推荐

