CoderTools

URL编解码工具 | CoderTools

描述

关于URL编码

URL编码,也称为百分号编码,是在特定情况下对统一资源标识符(URI)中的信息进行编码的机制。它包括用一个或多个字符三元组替换某些字符,这些三元组由百分号字符'%'和两个十六进制数字组成。

当URL包含URL中不允许的字符,或当字符在URL语法中有特殊含义时,就需要URL编码。这确保了URL可以安全地在互联网上传输,无论它们包含什么字符。

注意: URL的不同部分(协议、权威、路径、查询、片段)有不同的编码规则。此工具使用标准URL编码,适用于查询参数和表单数据。

常见字符及其编码

字符 URL编码 描述
Space %20 空格字符
! %21 感叹号
" %22 引号
# %23 井号/片段标识符
% %25 百分号字符
& %26 与符号/查询分隔符
+ %2B 加号
= %3D 等号/查询值分隔符
? %3F 问号/查询指示符

常见用途

示例

示例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()。