对URL字符串进行编码和解码,全面支持encodeURIComponent和decodeURIComponent方法
| 字符 | 编码后 | 说明 | 组件安全 |
|---|---|---|---|
! |
%21 | 感叹号 | ✗ |
# |
%23 | 井号 | ✗ |
$ |
%24 | 美元符号 | ✗ |
& |
%26 | 和号 | ✗ |
+ |
%2B | 加号 | ✗ |
, |
%2C | 逗号 | ✗ |
/ |
%2F | 斜杠 | ✓ |
: |
%3A | 冒号 | ✓ |
; |
%3B | 分号 | ✗ |
= |
%3D | 等号 | ✗ |
@ |
%40 | @符号 | ✓ |
space |
%20 | 空格 | ✗ |
? |
%3F | 问号 | ✗ |
[ ] |
%5B %5D | 方括号 | ✗ |
💡 提示:编码查询参数值时使用组件编码(encodeURIComponent);编码完整URL路径时使用完整URL编码(encodeURI)。
URL 编码(又称百分号编码,Percent-encoding)工具是一款实现文本与 URL 安全编码之间相互转换的在线工具。URL 规范(RFC 3986)规定只有特定字符可以安全地出现在 URL 中:字母、数字和少数特殊字符(- _ . ~)。中文、空格、&、=、? 等字符在 URL 中需要进行百分号编码——将字符转为 % 后跟两位十六进制数(如空格→%20,中→%E4%B8%AD)。本工具支持 encode(编码)和 decode(解码)双向转换,同时区分 encodeURIComponent(编码所有特殊字符)和 encodeURI(保留 URL 结构字符)两种模式。
构建 GET 请求 URL 时,查询参数值中的特殊字符需要编码。例如搜索关键词"前端开发"需要编码为 %E5%89%8D%E7%AB%AF%E5%BC%80%E5%8F%91 才能安全地放在 URL 中。
调用 REST API 时,URL 中的路径参数和查询参数需要正确编码。包含空格、中文或特殊字符的参数值必须经过 URL 编码,否则请求可能失败或返回错误结果。
收到一个包含大量 %XX 编码的 URL 时,使用解码功能查看原始内容,确认链接是否正确、参数值是什么。
URL 编码规则:非保留字符(字母、数字、- _ . ~)保持不变;其他字符转为 UTF-8 字节序列,每个字节表示为 % 加两位十六进制。JavaScript 提供了两个内置函数:encodeURIComponent() 编码所有特殊字符(包括 :/?#[]@!$&'()*+,;=),encodeURI() 保留 URL 结构字符(:/?#[]@!$&'()*+,;=)。
// URL 编码对比
const text = "Hello World! 你好";
encodeURIComponent(text);
// "Hello%20World!%20%E4%BD%A0%E5%A5%BD"
encodeURI(text);
// "Hello%20World!%20%E4%BD%A0%E5%A5%BD"
// 区别在于 URL 结构字符
const url = "https://example.com/path?q=测试&lang=zh";
encodeURI(url); // 保留 :/?&= 不编码
encodeURIComponent(url); // 全部编码
// 解码
decodeURIComponent("%E4%BD%A0%E5%A5%BD"); // "你好"
decodeURI("%E4%BD%A0%E5%A5%BD"); // "你好"
A>encodeURIComponent 编码所有特殊字符(包括 :/?#[]@!$&'()*+,;=),用于编码单个参数值。encodeURI 保留 URL 结构字符不编码,用于编码完整 URL。对参数值用 encodeURI 可能出错(如参数值包含 & 会不被编码,导致参数分割错误)。
A>%20 是标准 URL 编码(RFC 3986),+ 是表单编码(application/x-www-form-urlencoded)中空格的表现形式。URL 路径和查询参数中的空格应编码为 %20。表单提交时 JavaScript 自动将空格转为 +。
A>如果文本已经被 URL 编码过一次,再次编码会把 % 符号也编码(%→%25),导致 %20 变为 %2520。解码时需要对应地解码两次。避免方法:在编码前检查文本是否已被编码,或使用框架自带的参数编码功能。
A>每个中文字符在 UTF-8 中占 3 个字节,每个字节编码为 %XX(3 个字符),所以一个中文字符编码后变为 9 个字符(如"中"→%E4%B8%AD)。这是 UTF-8 编码的特性,无法缩短。如需缩短 URL,考虑使用 URL 缩短服务。
A>Node.js 提供相同的全局函数 encodeURIComponent/encodeURI。此外还有 url 模块:new URL('https://api.com').searchParams.set('q', '中文') 会自动编码参数值。推荐使用 URL 对象而非手动拼接。