DeepSeal — 本地加密笔记应用,你的隐私只有你说了算。 免费下载 → ×
%20

URL 编码 / 解码

URL 编码(百分号编码)、解码,支持 UTF-8 与 URI 组件。

P1
文本 ↔ URL 编码
原文
encodeURIComponent:编码所有特殊字符(适合 Query 参数)
encodeURI:保留 URL 结构符(适合整段 URL)
URL 编码(百分号编码)

URL 在线编码 / 解码

URL 编码(也叫百分号编码,Percent-Encoding)将 URL 中的特殊字符、非 ASCII 字符转换为 %XX 形式,确保 URL 在网络传输中不被错误解析。本工具支持 encodeURIComponentencodeURI 两种编码方式。

encodeURI vs encodeURIComponent

  • encodeURI:保留 URL 结构符(: / ? # [ ] @ ! $ & ' ( ) * + , ; =),适合整段 URL 编码。
  • encodeURIComponent:编码所有特殊字符,适合 URL 中的查询参数值、片段、路径段。本工具默认此项。

常见应用

  • 查询参数:URL 中 ? 后的参数值含中文、空格、&、= 等必须编码。
  • 路径:URL 路径段含特殊字符需编码。
  • 回调 URL:OAuth、支付回调中的 URL 参数本身是 URL,需要二次编码。
  • API 调试:调试含中文/特殊字符的 API 时正确编码避免乱码。

URL 编码注意事项

空格编码有两种合法形式:%20+。HTML 表单提交(Content-Type: application/x-www-form-urlencoded)用 + 表示空格;纯 URL 中 RFC 3986 推荐 %20。混用可能导致服务端解析错误——解码 %20 得到空格,解码 + 在表单上下文得到空格、在纯 URL 上下文得到字面 +。本工具使用 %20 以符合 RFC 3986 标准。

双重编码陷阱:如果 URL 被编码两次,% 会变成 %25,例如 %20 编码后变成 %2520,解码一次得到 %20 而非空格。这是常见 bug,通常由框架自动编码 + 手动编码叠加导致。调试时先检查编码层数。中文 URL:现代浏览器地址栏会显示中文(自动解码显示),但底层传输和复制出来都是编码形式。在 HTML 的 href 中建议使用编码后的 URL,尤其包含 & 等字符时,否则可能被解析为 HTML 实体。

与 Base64 的区别:URL 编码目标是让特殊字符在 URL 中安全传输,体积膨胀不固定(中文 3 倍);Base64 是让二进制数据用 ASCII 表示,固定膨胀 4/3。两者场景不同,不可互换。如果要在 URL 中传 Base64 数据,需进一步用 Base64Url 变体(+ 换 -、/ 换 _),否则 + 会被解码为空格。

URL 常见问答

什么是 URL 编码?
URL 编码(百分号编码)将 URL 中不允许的字符转换为 % 后跟两位十六进制的形式。例如空格编码为 %20,中文"中"编码为 %E4%B8%AD。URL 只允许 ASCII 字母数字和少数符号,其他字符必须编码。
encodeURIComponent 和 encodeURI 的区别?
encodeURIComponent 编码所有非 URL 安全字符,包括 :/?&= 等保留字符,适合编码 URL 参数值。encodeURI 保留 URL 结构字符(:/?&= 等),适合编码完整 URL。一般编码参数用 encodeURIComponent。
中文 URL 需要编码吗?
需要。URL 标准只允许 ASCII 字符,中文必须编码。现代浏览器地址栏会显示中文(自动解码),但复制出来或作为链接传递时是编码形式。在 HTML 的 href 中建议使用编码后的 URL 以避免兼容性问题。
URL 编码后还能再编码吗?
可以,会形成双重编码。例如 %20 再编码为 %2520。这通常是由于程序重复编码导致的 bug,需要注意只编码一次。

HyperGrad 生态还有这些站