URL 编码 / 解码器

这个 URL 编码解码器可将特殊字符转换为百分号编码格式(%XX),以便在 URL 中安全使用,并将编码字符串解码回可读文本。粘贴任意 URL 或文本,轻松处理保留字符、空格和 Unicode,适用于 Web 开发和 API 集成。

URL 编码 / 解码器

将文本编码为适合 URL 的格式,或解码 URL 编码字符串

常见问题

什么是URL编码?

URL编码也称为百分比编码,是将字符转换为可在URL中安全传输格式的过程。URL中不允许的字符(如空格、&、=和非ASCII字符)会被替换为百分号(%)后跟其两位十六进制值。例如,空格变为%20。

为什么URL需要编码?

URL只能包含有限的ASCII字符集。空格、&符号、等号和非英语字符会破坏URL解析或被错误解释。编码确保数据在查询字符串、表单提交和API请求中正确传输,而不会与URL语法分隔符冲突。

哪些字符需要URL编码?

必须编码的字符包括:空格、非ASCII字符(如带重音的字母和CJK字符),以及作为数据而非分隔符使用时的保留字符。保留字符包括:: / ? # [ ] @ ! $ & ' ( ) * + , ; =。不需要编码的非保留字符(A-Z、a-z、0-9、-、_、.、~)永远不需要编码。

什么是百分比编码?

百分比编码是RFC 3986定义的URL编码的正式名称。每个字符被转换为其UTF-8字节序列,每个字节表示为%XX,其中XX是十六进制值。例如,欧元符号编码为%E2%82%AC(三个UTF-8字节)。"百分比编码"这个术语来源于每个编码字节中使用的%前缀。

encodeURI和encodeURIComponent有什么区别?

在JavaScript中,encodeURI()对完整URI进行编码,但保留在URL中具有特殊含义的字符(如:、/、?、#、&)。encodeURIComponent()对除不需要编码字符外的所有内容进行编码,适合编码单个查询参数值。对完整URL使用encodeURI,对参数值使用encodeURIComponent。

如何解码URL?

URL解码通过将%XX序列转换回原始字符来逆转百分比编码。在JavaScript中,对完整URL使用decodeURI(),对单个组件使用decodeURIComponent()。在Python中,使用urllib.parse.unquote()。大多数编程语言都提供内置的URL解码函数,可以自动处理UTF-8多字节序列。

URL中空格用加号还是%20表示?

+和%20都表示空格,但在不同场景下使用。+号代替空格来自HTML表单提交使用的application/x-www-form-urlencoded格式。%20是RFC 3986中定义的标准百分比编码。在URL路径中,始终使用%20。在查询字符串中,两者都可接受,但%20与各系统的兼容性更好。

如何在Python、Java或PHP中进行URL编码?

在Python中,使用urllib.parse.quote()编码,urllib.parse.unquote()解码。在Java中,使用URLEncoder.encode(str, "UTF-8")和URLDecoder.decode(str, "UTF-8")。在PHP中,使用urlencode()进行表单风格编码(空格用+号),或rawurlencode()进行RFC 3986编码(空格用%20)。解码分别使用urldecode()或rawurldecode()。

什么是双重编码,如何避免?

双重编码是指对已编码的字符串再次编码,将%20变为%2520(%本身被编码为%25)。这会破坏URL,因为服务器接收到的%20是字面文本而不是空格。为避免双重编码,在重新编码前始终完全解码字符串,永远不要对已包含有效百分比编码字符的完整URL进行编码。

URL编码和HTML编码有什么区别?

URL编码(百分比编码)将字符转换为%XX格式用于URL中。HTML编码将字符转换为命名实体(&、<、>)或数字实体(&、<)以便在HTML文档中安全显示。它们的用途不同:URL编码防止URL解析错误,而HTML编码防止XSS攻击并确保特殊字符在网页中正确显示。

关于 URL 编码 / 解码器

URL 编码 / 解码器是 Web 开发者的必备工具,可将文本通过百分号编码转换为 URL 安全格式,或将百分号编码字符串解码回可读文本。URL 编码确保特殊字符在 URL 中正确传输,避免解析错误或歧义。

什么是 URL 编码?

URL 编码又称百分号编码,是一种对在 URL 中具有特殊含义或不允许直接使用的字符进行编码的机制。每个被编码的字符替换为百分号(%)后跟两位十六进制数字,表示该字符的字节值。例如,空格变为 %20& 变为 %26

如何使用 URL 编码 / 解码器

  1. 选择编码选项卡将文本转换为 URL 安全格式,或选择解码选项卡转换回纯文本
  2. 在输入区域输入或粘贴文本
  3. URL 编码 / 解码器会实时即时转换输入内容
  4. 在字符拆解视图中查看具体哪些字符被编码
  5. 点击复制按钮将结果复制到剪贴板

需要 URL 编码的字符

以下字符在 URL 中具有特殊含义,作为数据值使用时必须进行编码:

字符编码在 URL 中的作用
空格%20分隔符
!%21子分隔符
#%23片段标识符
$%24子分隔符
&%26参数分隔符
'%27子分隔符
(%28子分隔符
)%29子分隔符
+%2B空格(表单中)
/%2F路径分隔符
:%3A协议分隔符
=%3D键值分隔符
?%3F查询字符串开始
@%40用户信息分隔符

URL 编码的常见应用场景

  • 对包含特殊字符的查询参数进行编码
  • 将用户提交的数据准备好以便包含在 URL 中
  • 对含有空格或特殊字符的文件路径进行编码
  • 构建带有动态参数的 API 请求 URL
  • 对作为参数传递的重定向 URL 进行编码
  • 处理包含非 ASCII 字符的国际化域名和路径

encodeURIComponent 与 encodeURI 的区别

本工具使用 encodeURIComponent(),对除非保留字符(字母、数字、连字符、句点、下划线和波浪号)以外的所有字符进行编码,适合对查询参数值等单个 URL 组件进行编码。另一个函数 encodeURI() 设计用于对整个 URI 进行编码,会保留 :/?# 等在 URL 中具有结构性意义的字符。

各编程语言中的 URL 编码

语言编码解码
JavaScriptencodeURIComponent(str)decodeURIComponent(str)
Pythonurllib.parse.quote(str)urllib.parse.unquote(str)
JavaURLEncoder.encode(str, "UTF-8")URLDecoder.decode(str, "UTF-8")
PHPrawurlencode($str)rawurldecode($str)
C#Uri.EscapeDataString(str)Uri.UnescapeDataString(str)
Gourl.QueryEscape(str)url.QueryUnescape(str)
RubyCGI.escape(str)CGI.unescape(str)

URL 编码使用建议

  • 在将用户输入包含到 URL 之前,务必进行编码,以防止注入攻击
  • 对查询参数值使用 encodeURIComponent(),不要用于整个 URL
  • 注意空格可以编码为 %20+,具体取决于使用场景
  • 双重编码(对已编码字符串再次编码)会引发问题——重新编码前务必先解码
  • Unicode 字符会先转换为 UTF-8 字节,再对每个字节进行百分号编码

相关工具