JavaScript encodeURI() 语法
encodeURI() 是 JavaScript 的一个全局函数,它用于对 “整个 URI” 进行编码,以便将 URI 中的特殊字符转换为 “%xx” 的形式(其中 “xx” 是字符的十六进制表示)。
语法:
encodeURI(uri)说明:
encodeURI() 函数接收单个参数。
uri(必选):是一个 URI 字符串。
encodeURI() 函数转义会所有字符,但不包括以下字符。
- 字母数字字符:A-Z a-z 0-9。
- 特殊字符:- _ . ! ~ * ' ( )。
- URI 保留字符:; / ? : @ & = + $ , # ( 这些字符在 URI 中有特定含义,encodeURI() 不会编码它们,因为它们是 URI 结构的一部分 )。
提示:
- encodeURI() 是一个全局函数(顶层函数),我们可以直接调用而无需创建实例。
- 如果只需要编码 URI 的某个部分(例如查询参数的值,而不是整个 URI),我们应该使用 encodeURIComponent() 函数。
JavaScript encodeURI() 摘要
| 属于 | JavaScript 全局对象 |
|---|---|
| 使用频率 | 低 |
| 官方文档 | 查看 |
| MDN | 查看 |
JavaScript encodeURI() 示例
接下来,我们通过几个简单的例子来讲解一下 encodeURI() 函数是如何使用的。
示例 1:URI 包含中文
const str = "https://www.lvyenet.com/?keywords=绿叶网";
console.log(encodeURI(str));运行结果如下。
https://www.lvyenet.com/?keywords=%E7%BB%BF%E5%8F%B6%E7%BD%91示例 2:URI 包含特殊符号
const str = "https://www.lvyenet.com/?keywords=πθφ";
console.log(encodeURI(str));运行结果如下。
https://www.lvyenet.com/?keywords=%CF%80%CE%B8%CF%86encodeURI() 与 encodeURIComponent() 的区别
encodeURI() 与 encodeURIComponent() 这两个函数都用于对 URI 进行编码,但它们之间存在以下的区别。
encodeURI():不会对属于 URI 语法的字符(即 URI 保留字符)进行编码,包括 /、:、?、= 等。比如 "?keywords=python&charset=utf8" 编码之后还是 "?keywords=python&charset=utf8"。encodeURIComponent():会对属于 URI 语法的字符进行编码,编码会更加彻底。比如 "?keywords=python&charset=utf8" 编码之后会变成 "%3Fkeywords%3Dpython%26charset%3Dutf8"。
| 原值 | encodeURI() | encodeURIComponent() |
|---|---|---|
| % | %25 | %25 |
| 空格 | %20 | %20 |
| : | : | %3A |
| / | / | %2F |
| ? | ? | %3F |
| = | = | %3D |
| + | + | %2B |
| ; | ; | %3B |
| # | # | %23 |
| $ | $ | %24 |
| & | & | %26 |
| @ | @ | %40 |
示例 3:encodeURI() vs encodeURIComponent()
const str = "?keywords=绿叶网&charset=utf8";
console.log(encodeURI(str));
console.log(encodeURIComponent(str));运行结果如下。
?keywords=%E7%BB%BF%E5%8F%B6%E7%BD%91&charset=utf8
%3Fkeywords%3D%E7%BB%BF%E5%8F%B6%E7%BD%91%26charset%3Dutf8分析:
再次强调一下:如果想要编码 “整个 URI”,我们应该使用 encodeURI() 函数。如果想要编码 “URI 的某个部分(如查询字符串)”,我们应该使用 encodeURIComponent() 函数。
