我如何 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");
但是,此代码存在一些问题。
- 这不是最好的解决方案,很可能有更好的解决方案。
- and区分大小写(意思是我不能输入“AND”,“aNd", 等等).
是否有其他方法可以满足这些要求?它还需要在旧版浏览器(如 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);
让我们看一下代码。
- 正在使用的第一个
replace()
函数正在用 %20
替换所有空格(由 \s
表示)。第一个参数使用 RegExp 全局替换所有出现的地方(在 RegExp 末尾用 g
表示)。 JavaScript 中有一个更新的方法叫做 replaceAll()
,但不幸的是,它是在 ES6 之后出现的!
- 第二个
replace()
获取所有出现的 and
,并用 %26
全局替换它们。但是,RegExp 中还有另一个标志(i
标志),这意味着它是case-insensitive。这意味着它可以处理 AND
、aNd
等词。
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);
让我们看一下代码。
encodeURIComponent()
行会将任何特殊字符编码为它们的 URL 编码,如前所述。
- 我们仍然必须保持
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");
我需要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");
但是,此代码存在一些问题。
- 这不是最好的解决方案,很可能有更好的解决方案。
- and区分大小写(意思是我不能输入“AND”,“aNd", 等等).
是否有其他方法可以满足这些要求?它还需要在旧版浏览器(如 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);
让我们看一下代码。
- 正在使用的第一个
replace()
函数正在用%20
替换所有空格(由\s
表示)。第一个参数使用 RegExp 全局替换所有出现的地方(在 RegExp 末尾用g
表示)。 JavaScript 中有一个更新的方法叫做replaceAll()
,但不幸的是,它是在 ES6 之后出现的! - 第二个
replace()
获取所有出现的and
,并用%26
全局替换它们。但是,RegExp 中还有另一个标志(i
标志),这意味着它是case-insensitive。这意味着它可以处理AND
、aNd
等词。
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);
让我们看一下代码。
encodeURIComponent()
行会将任何特殊字符编码为它们的 URL 编码,如前所述。- 我们仍然必须保持
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");