我如何 URL 编码空格和单词 "and"?

How do I URL encode spaces and the word "and"?

我需要URL编码以下字符。

Key Encoding
Space %20
and (literal word) %26

为此,我编写了以下代码。 (我需要使用 var,因为我的目标是较旧的浏览器。)

var word = "Windows and Mac"; // This can be anything

word = word.split(" ").join("%20");
word = word.split("and").join("%26");

但是,此代码存在一些问题。


是否有其他方法可以满足这些要求?它还需要在旧版浏览器(如 IE)上运行。

有两种方法可以做到这一点。


1.使用 replace()

第一个解决方案是使用 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. 正在使用的第一个 replace() 函数正在用 %20 替换所有空格(由 \s 表示)。第一个参数使用 RegExp 全局替换所有出现的地方(在 RegExp 末尾用 g 表示)。 JavaScript 中有一个更新的方法叫做 replaceAll(),但不幸的是,它是在 ES6 之后出现的!
  2. 第二个 replace() 获取所有出现的 and,并用 %26 全局替换它们。但是,RegExp 中还有另一个标志(i 标志),这意味着它是case-insensitive。这意味着它可以处理 ANDaNd 等词。

2。使用 encodeURIComponent()

第二种更好的解决方案是使用 encodeURIComponent() 函数。

根据MDN Web Docs

The encodeURIComponent() function encodes a URI by replacing each instance of certain characters by one, two, three, or four escape sequences representing the UTF-8 encoding of the character (will only be four escape sequences for characters composed of two "surrogate" characters).

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

此外,与 replace() 一样,Internet Explorer 5.5 及更高版本支持此功能。

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

var word = "Windows and Mac";

word = encodeURIComponent(word);
word = word.replace(/and/ig, "%26");

console.log(word);

让我们看一下代码。

  1. encodeURIComponent() 行会将任何特殊字符编码为它们的 URL 编码,如前所述。
  2. 我们仍然必须保持 replace() 函数不变,因为 encodeURIComponent() 只编码字符,不编码单词。阅读第一个解决方案,了解有关这行代码如何工作的更多信息。

此外,代码的顺序很重要!例如,如果我们将 replace() 放在 encodeURIComponent() 函数之前,它将对 % 进行编码,这将导致一些奇怪的结果(没有错误)。您可以在下面自己尝试一下!

var word = "Windows and Mac";

word = word.replace(/and/ig, "%26");
word = encodeURIComponent(word);

console.log(word);

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


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

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

var word = "Windows and Mac"; // This can be anything

word = word.replace(/\s/g, "%20");
word = word.replace(/and/gmi, "%26");