【问题标题】:prevent javascript to encode url防止javascript编码url
【发布时间】:2023-02-07 18:24:20
【问题描述】:

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

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

【问题讨论】:

  • 这个name 是从哪里来的?也许它的末尾有一些您不修剪的符号?喜欢换行符

标签: javascript url urlencode pushstate


【解决方案1】:

提供的代码没有理由不工作,但我怀疑 name 实际上是格式错误的。如果我在 URL 中获得 %E2%80%8C 后缀并通过 decodeURI 运行它,我得到一个空字符串。但是,如果我手动将它转换为字符串 ,我会得到以下内容:â。这很可能意味着数据损坏。

【讨论】:

    【解决方案2】:

    使用更改您的网址encodeURI组件

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

    这将更改您的网址,并且该网址不会有任何空格和错误字符

    【讨论】:

      【解决方案3】:

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


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


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

        function remove_non_ascii(str) {
          
          if ((str===null) || (str===''))
               return false;
         else
           str = str.toString();
          
          return str.replace(/[^ -~]/g, '');
        }
        
        console.log(remove_non_ascii('äÄçÇéÉêHello-WorldöÖÐþúÚ'));
        

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-05-26
        • 1970-01-01
        • 2014-09-13
        • 1970-01-01
        相关资源
        最近更新 更多