URL编解码工具 | CoderTools
描述
关于URL编码
URL编码,也称为百分号编码,是在特定情况下对统一资源标识符(URI)中的信息进行编码的机制。它包括用一个或多个字符三元组替换某些字符,这些三元组由百分号字符'%'和两个十六进制数字组成。
当URL包含URL中不允许的字符,或当字符在URL语法中有特殊含义时,就需要URL编码。这确保了URL可以安全地在互联网上传输,无论它们包含什么字符。
注意: URL的不同部分(协议、权威、路径、查询、片段)有不同的编码规则。此工具使用标准URL编码,适用于查询参数和表单数据。
常见字符及其编码
| 字符 | URL编码 | 描述 |
|---|---|---|
| Space | %20 | 空格字符 |
| ! | %21 | 感叹号 |
| " | %22 | 引号 |
| # | %23 | 井号/片段标识符 |
| % | %25 | 百分号字符 |
| & | %26 | 与符号/查询分隔符 |
| + | %2B | 加号 |
| = | %3D | 等号/查询值分隔符 |
| ? | %3F | 问号/查询指示符 |
常见用途
- 编码Web表单中的查询参数
- 处理API请求中的特殊字符
- 处理URL中带有特殊字符的文件名
- 在URL中编码电子邮件地址和其他数据
- 调试Web应用程序和API调用
示例
示例1:查询参数
Original: Hello World!
Encoded: Hello%20World%21
示例2:电子邮件地址
Original: [email protected]
Encoded: user%40example.com
示例3:复杂查询
Original: search=JavaScript & Node.js
Encoded: search%3DJavaScript%20%26%20Node.js
参考资料与延伸阅读
最佳实践
查询参数使用encodeURIComponent()
在JavaScript中,对单个查询参数值使用encodeURIComponent()。它会编码所有特殊字符,包括&、=和?。不要用encodeURI()来处理这个。
不要重复编码
对已编码的URL再次编码会产生损坏的链接(如%25而不是%)。在再次应用编码前,检查数据是否已经编码。
仅在必要时编码
字母数字字符(A-Z、a-z、0-9)和-_.~不需要编码。编码所有内容会浪费带宽并降低URL可读性。
使用标准库函数
不要手动实现URL编码。使用内置函数:encodeURIComponent()(JS)、urllib.parse.quote()(Python)、urlencode()(PHP)。
谨慎处理加号
空格可以编码为+(表单编码)或%20(URL编码)。了解您的系统期望哪种。大多数API偏好用%20表示空格。
在源头编码
在构建URL时编码数据,而不是之后。先构建URL字符串再编码整个内容会破坏URL结构。
常见问题排查
为什么解码后的URL仍有%XX序列?
该URL可能被双重编码了。尝试再次解码。这发生在已编码的URL被二次编码时。
为什么我的+号变成了空格?
在表单数据(application/x-www-form-urlencoded)中,+代表空格。在URL中,如果您想要字面上的加号,+应编码为%2B。
为什么服务器收到乱码字符?
编码不匹配。确保客户端和服务器都期望UTF-8编码的值。非ASCII字符必须先UTF-8编码,再进行百分号编码。
为什么encodeURI()没有编码我的查询参数?
encodeURI()用于完整的URI并保留&、=、?等特殊字符。对单个参数值使用encodeURIComponent()。