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 编码 / 解码器
- 选择编码选项卡将文本转换为 URL 安全格式,或选择解码选项卡转换回纯文本
- 在输入区域输入或粘贴文本
- URL 编码 / 解码器会实时即时转换输入内容
- 在字符拆解视图中查看具体哪些字符被编码
- 点击复制按钮将结果复制到剪贴板
需要 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 编码
| 语言 | 编码 | 解码 |
|---|---|---|
| JavaScript | encodeURIComponent(str) | decodeURIComponent(str) |
| Python | urllib.parse.quote(str) | urllib.parse.unquote(str) |
| Java | URLEncoder.encode(str, "UTF-8") | URLDecoder.decode(str, "UTF-8") |
| PHP | rawurlencode($str) | rawurldecode($str) |
| C# | Uri.EscapeDataString(str) | Uri.UnescapeDataString(str) |
| Go | url.QueryEscape(str) | url.QueryUnescape(str) |
| Ruby | CGI.escape(str) | CGI.unescape(str) |
URL 编码使用建议
- 在将用户输入包含到 URL 之前,务必进行编码,以防止注入攻击
- 对查询参数值使用
encodeURIComponent(),不要用于整个 URL - 注意空格可以编码为
%20或+,具体取决于使用场景 - 双重编码(对已编码字符串再次编码)会引发问题——重新编码前务必先解码
- Unicode 字符会先转换为 UTF-8 字节,再对每个字节进行百分号编码