有几种方法可以实现这一点.
1. Use 100
第一种解决方案是使用string
原语上的replace()
函数.
您可以使用更简单的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()
函数是将所有空格(由\s
表示)替换为%20
.第一个参数使用RegExp全局替换所有出现的情况(在RegExp末尾用g
表示).JavaScript中有一个更新的方法叫做replaceAll()
,但不幸的是,它是在ES6之后出现的!
- 第二个
replace()
个是获得所有and
个事件,并在全局替换为%26
个.然而,RegExp中还有另一个标志(i
标志),这意味着它不区分大小写.这意味着它将适用于AND
、aNd
等单词.
2. Use 100
第二个更好的解决方案是使用encodeURIComponent()
函数.
根据MDN Web Docs:
102函数通过将某些字符的每个实例替换为代表该字符UTF-8编码的一个、两个、三个或四个转义序列(对于由两个"代理"字符组成的字符,只有四个转义序列)来对URI进行编码.
基本上,它会将所有特殊字符编码为其URL编码字符(例如,空格将为%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()
只编码字符,而不是单词.阅读第一个解决方案,了解这行代码如何工作的更多信息.
还有,the order of the code is important!例如,如果我们将replace()
放在encodeURIComponent()
函数之前,它将对%
进行编码,这将导致一些奇怪的结果(没有错误).你可以在下面自己试试!
var word = "Windows and Mac";
word = word.replace(/and/ig, "%26");
word = encodeURIComponent(word);
console.log(word);
你可以看到%
被编码成%25
,这会导致一些奇怪的结果!
总之,有两种解决方案都适用于Internet Explorer 5.5及更高版本.这些解决方案也满足您的要求.