什么是 URL 编码?
URL 编码(URL Encoding),也称百分号编码(Percent-Encoding),是将 URL 中不允许直接出现的字符转换为 %XX 格式的过程,其中 XX 是该字符的 UTF-8 字节的十六进制值。例如:
- 空格 →
%20(或+) &→%26=→%3D- 汉字「你好」→
%E4%BD%A0%E5%A5%BD
为什么需要 URL 编码?
URL 标准(RFC 3986)只允许特定的 ASCII 字符出现在 URL 中。当 URL 中需要包含特殊字符(空格、中文、符号等)时,必须先编码才能正确传输:
- 保留字符(
: / ? # [ ] @ ! $ & ' ( ) * + , ; =)在 URL 中有特殊语义,若需作为普通数据使用必须编码 - 非 ASCII 字符(中文、日文、特殊符号)不在 URL 允许范围内,必须编码
- 空格不允许直接出现在 URL 中,必须编码为
%20或+
encodeURI vs. encodeURIComponent(JavaScript)
| 函数 | 不编码的字符 | 适用场景 |
|---|---|---|
encodeURI() | 字母、数字、- _ . ! ~ * ' ( ) 及 URL 结构字符(: / ? # @ & = + $ ,) | 编码完整 URL,保留 URL 结构 |
encodeURIComponent() | 字母、数字、- _ . ! ~ * ' ( ) | 编码 URL 的某个参数值(如 query string 的值) |
// 编码完整 URL(保留 / ? = & 等结构符号)
encodeURI('https://example.com/search?q=你好 world')
// → 'https://example.com/search?q=%E4%BD%A0%E5%A5%BD%20world'
// 编码参数值(连 & = 也一起编码)
encodeURIComponent('你好 & world')
// → '%E4%BD%A0%E5%A5%BD%20%26%20world'