代码之家  ›  专栏  ›  技术社区  ›  Sagar

如何对空格和“and”进行编码?

  •  1
  • Sagar  · 技术社区  · 4 年前

    我需要将以下字符编码为URL编码。

    • 空间 (关键字,而不是单词)- %20
    • 和 (大写和小写)- %26

    为此,我想出了以下代码。

    var word = "Windows and Mac"; // This can be anything
    
    word = word.split(" ").join("%20");
    word = word.split("and").join("%26");
    

    然而,这段代码有一些问题。

    • 这不是最好的解决方案,可能还有更好的解决方案。
    • 这个 和 区分大小写。

    有没有其他方法来满足这些要求?它还需要在较旧的浏览器(如IE)上运行。

    2 回复  |  直到 4 年前
        1
  •  4
  •   Arnav Thorat natanavra    4 年前

    有几种方法可以实现这一点。


    1.使用 replace()

    第一个解决方案是使用 String.replace() 作用

    您可以使用更简单的 替换() 作用

    此外,该功能在Internet Explorer 5.5及更高版本中工作,这意味着它满足要求!

    要使用它,只需使用下面的代码。

    var word = "Windows and Mac";
    
    word = word.replace(/\s/g, "%20");
    word = word.replace(/and/ig, "%26");
    
    console.log(word);

    让我们浏览一下代码。

    1. 第一个 替换() 正在使用的函数正在替换所有空格(由 \s )与 %20 .第一个参数使用RegExp全局替换所有发生的事件(由 g ,位于RegExp的末尾)。JavaScript中有一个更新的方法叫做 replaceAll() 但不幸的是,这是在ES6之后发生的!
    2. 第二个 替换() 得到了所有的 and 事件,并用 %26 。但是,RegExp中还有另一个标志( i 标志),这意味着它不区分大小写。这意味着它将适用于以下词语: AND , aNd 等等

    2.使用 encodeURIComponent()

    第二个更好的解决方案是使用 encodeURIComponent() 作用

    根据 MDN Web Docs :

    这个 encodeURIComponent() 函数对 URI 通过将特定字符的每个实例替换为一个、两个、三个或四个转义序列来表示 UTF-8 字符编码(对于由两个“代理”字符组成的字符,只有四个转义序列)。

    基本上,它会将所有特殊字符编码为它们的URL编码字符(例如。 空间 将 %20 ).

    还有 替换() ,Internet Explorer 5.5及更高版本支持此功能。

    要使用它,您需要使用下面的代码。

    var word = "Windows and Mac";
    
    word = encodeURIComponent(word);
    word = word.replace(/and/ig, "%26");
    
    console.log(word);

    让我们看一下代码。

    1. 这个 encodeURIComponent() 如前所述,line会将任何特殊字符编码到其URL编码中。
    2. 我们还得离开机场 替换() 按部就班 encodeURIComponent() 只编码字符,不编码单词。阅读第一个解决方案,了解这行代码如何工作的更多信息。

    而且 代码的顺序很重要 ! 例如,如果我们将 替换() 在 encodeURIComponent() 函数,它将对 % ,这将导致一些奇怪的结果(没有错误)。你可以在下面自己试试!

    var word = "Windows and Mac";
    
    word = word.replace(/and/ig, "%26");
    word = encodeURIComponent(word);
    
    console.log(word);

    你可以看到 % 编码为 %25 ,这会导致一些奇怪的结果!


    总之,有两种解决方案都适用于Internet Explorer 5.5及更高版本。这些解决方案也满足您的要求。

        2
  •  1
  •   DepletedKnowledge    4 年前

    看起来不错,但最好使用“replace”,对于“and”问题,只需使用regex:

    var word = "Windows and Mac"; // This can be anything
    
    word = word.replace(/\s/g, "%20");
    word = word.replace(/and/gmi, "%26");