什么是 URL 编码
URL 标准规定网址只能包含 ASCII 字符中的"安全字符"——字母、数字和少数符号。但实际使用中我们经常需要在 URL 中传递中文搜索词、JSON 参数、文件路径。如果直接把非 ASCII 字符塞进 URL,不同浏览器和服务器的解析结果可能不一致,导致乱码或请求失败。
// 原始 URL(含中文和空格)
https://example.com/search?q=你好 世界&lang=中文
// URL 编码后(合法、可安全传输)
https://example.com/search?q=%E4%BD%A0%E5%A5%BD%20%E4%B8%96%E7%95%8C&lang=%E4%B8%AD%E6%96%87
编码规则:把非安全字符转为 UTF-8 字节序列,每个字节写成 %XX(XX = 两位十六进制)。英文和数字保持不变。
在线 URL 编解码的步骤
- 打开 URL 编解码工具。
- 粘贴需要编码的文本(含中文或特殊符号),点击「编码」,右侧显示 URL 安全版本。
- 反之,粘贴一段 %E4%BD%A0%E5%A5%BD 这样的编码串,点击「解码」还原原文。
- 点击「复制」将结果用于 URL 参数或代码中。
核心功能一览
编码 / 解码
一键将文本转成百分比编码或反向还原,支持 UTF-8。
encodeURIComponent 模式
编码所有特殊字符(含 & = ?),适合参数值编码。
实时预览
输入的同时即时显示编码/解码结果。
纯本地运行
浏览器本地完成编码转换,数据不上传。
encodeURI vs encodeURIComponent:核心区别
| 函数 | 编码范围 | 保留字符 | 使用场景 |
|---|---|---|---|
| encodeURI | 仅非 ASCII 字符 | : / ? # @ & = + $ , ; | 编码完整 URL |
| encodeURIComponent | 除安全字符外全部 | A-Z a-z 0-9 - _ . ! ~ * ' ( ) | 编码 URL 参数值 |
常见应用场景
- API 请求参数:GET 请求的查询参数含中文、JSON 字符串时,先编码再拼接 URL。
- 前端路由:Vue/React 路由跳转时 URL 中的动态参数(用户名、文章标题)需编码。
- 调试接口:浏览器地址栏复制出来的 URL 常常已经是编码后的,解码查看原始参数内容。
常见问题 FAQ
encodeURI 和 encodeURIComponent 有什么区别?
encodeURI 用于编码完整 URL,保留 : / ? # @ & 等 URL 结构字符,只编码非 ASCII 字符。如果用它编码参数值,& 和 = 不会被转义,可能导致参数解析错误。encodeURIComponent 更严格,会把除了字母数字和少量安全字符外的所有字符都编码,适合单独编码一个参数值。简单记:编码参数值用 encodeURIComponent,编码整个 URL 用 encodeURI。
为什么 URL 中的中文变成了 % 加字母数字?
这是百分号编码。URL 标准只允许 ASCII 的特定安全字符出现。中文先按 UTF-8 转成字节序列(如"你"是 E4 BD A0 三个字节),每个字节写为 %XX(XX 是十六进制值),最终得到 %E4%BD%A0。在线工具帮你自动完成这个过程。
空格在 URL 中是 %20 还是 +?
在 URL 路径部分(path),空格编码为 %20。在查询字符串(? 后面),传统 HTML 表单提交用 + 表示空格(application/x-www-form-urlencoded 格式)。现代标准倾向统一使用 %20,但后端框架通常同时接受两者。
在线 URL 编解码安全吗?数据会上传吗?
速工具 的 URL 编解码完全在浏览器本地完成,只是字符替换运算——中文 → UTF-8 字节 → %XX 格式。不涉及任何网络通信,数据不会被上传或记录。