阻止 JavaScript 对 URL 进行编码

prevent javascript to encode url

提问人:saleh 提问时间:2/7/2023 最后编辑:saleh 更新时间:2/7/2023 访问量:153

问:

我正在尝试在 java 脚本中更改 url,我的 url 没有任何空格或 url 的坏字符,但 java 脚本对其进行编码并在其中添加一些字符。 我的代码是:pushstate

name= name.trim();
const nextState = { additionalInformation: name };
window.history.pushState(nextState, "", my_domain()+"/brands/" + name);

我的网址是:

http://localhost/brands/Brilliance

但它显示为:

http://localhost/brands/Brilliance%E2%80%8C
JavaScript URL urlencode pushstate

评论

0赞 Justinas 2/7/2023
这是从哪里来的?也许它的末尾有一些你没有修剪的符号?喜欢换行符name

答:

0赞 TopchetoEU 2/7/2023 #1

提供的代码没有理由不起作用,但我怀疑实际上格式不正确。如果我在 URL 中获取后缀并运行它,我会得到一个空字符串。但是,如果我手动将其转换为字符串,我会得到以下内容: .这很可能意味着数据已损坏。name%E2%80%8CdecodeURI\xe2\x80\x8câ\x80\x8C

0赞 Codes_matter 2/7/2023 #2

使用 encodeURIComponent 更改 URL

const nextState = encodeURIComponent('http://localhost/brands/Brilliance');
history.pushState({}, '', nextState);

这将更改您的 URL,并且 URL 将没有任何空格和错误字符

1赞 Danny_Heeley 2/7/2023 #3

URL 末尾的“%E2%80%8C”是一个不可见的 Unicode/ASCII 字符,当您粘贴到 URL 中时,您可能会复制该字符,或者可能是某个包导致的。无论哪种情况,都可以通过以下两种方法解决此问题:


您可以将链接粘贴到十六进制编辑器中,并手动删除不可见字符,然后再复制粘贴回代码编辑器。


您可以使用此 javascript 解决方案来删除字符:

function remove_non_ascii(str) {
  
  if ((str===null) || (str===''))
       return false;
 else
   str = str.toString();
  
  return str.replace(/[^\x20-\x7E]/g, '');
}

console.log(remove_non_ascii('äÄçÇéÉêHello-WorldöÖÐþúÚ'));

评论

0赞 saleh 2/8/2023
它对英语字符和 TNX 非常有效。但是当我调用波斯字符的方法时,它返回空 string.is 有什么方法可以保护波斯字符免受编码??