关于 URL 编码
URL 编码,也称为百分号编码,是一种在统一资源标识符 (URI) 中对信息进行编码的机制。它用于将 URL 中不允许的字符转换为可通过互联网传输的格式。此编码将不安全的 ASCII 字符替换为 "%" 后跟两个十六进制数字。
URL 编码的常见用途
- 格式化 URL 查询字符串
- 通过 HTTP 请求发送表单数据 (application/x-www-form-urlencoded)
- 创建包含特殊字符或空格的有效 URL
- 对 URL 中的非 ASCII 字符进行编码
- 在 API 和 Web 服务中传递复杂参数
URL 编码的工作原理
URL 编码遵循以下原则:
- 字母数字字符 (A-Z, a-z, 0-9) 保持不变
- 特殊字符如空格、?, &, =, %, + 转换为它们的百分号编码形式
- 每个 UTF-8 字节单独进行百分号编码
- 空格可以编码为 "%20" 或 "+"(在查询参数中)
- 保留字符如 /, :, ?, #, [ 在 URL 中有特殊含义,视上下文处理
encodeURI 与 encodeURIComponent
JavaScript 提供了两种 URL 编码函数:
- encodeURI:编码完整 URI,保留 URI 语法字符 (/:?#[]@!$&'()*+,;=)
- encodeURIComponent:编码 URI 组件,包含所有特殊字符
对于用户输入或查询参数,encodeURIComponent()
更安全,可确保所有潜在问题字符都被正确编码。
国际字符的 URL 编码
现代浏览器先将非 ASCII 字符用 UTF-8 编码,然后对每个字节进行百分号编码。这确保了国际字符、表情符号和其他 Unicode 符号能正确包含在 URL 中。例如,日文字符“日”先编码为 E6 97 A5,然后表示为 "%E6%97%A5"。
示例
原文 | URL 编码后 |
---|---|
Hello World | Hello%20World |
https://example.com/?q=search term | https%3A%2F%2Fexample.com%2F%3Fq%3Dsearch%20term |
50% off sale! | 50%25%20off%20sale%21 |
こんにちは | %E3%81%93%E3%82%93%E3%81%AB%E3%81%A1%E3%81%AF |