跳到主要内容

URL 编码 / 解码 — Component / 完整 URL / 表单数据

把空格、中文、emoji 等特殊字符转 %xx 百分号编码,或反向解码,全程浏览器本地

  • 本地处理
  • 分类 编码加密
  • 适合 快速检查小 payload、令牌、哈希和编码值。
速查:space%20&%26=%3D#%23?%3F+%2B/%2F:%3A
编码对比:Component / 完整 URL / 表单三种模式
字符Component完整 URL表单 (+)说明
(space)%20%20+表单模式用 + 表示空格
&%26&%26完整 URL 保留
=%3D=%3D完整 URL 保留
#%23#%23完整 URL 保留
?%3F?%3F完整 URL 保留
/%2F/%2F完整 URL 保留
:%3A:%3A完整 URL 保留
+%2B+%2B避免被解读成空格
@%40@%40完整 URL 保留
%E4%B8%AD%E4%B8%AD%E4%B8%AD三种模式均编码 UTF-8
浏览器 API 速查
API编码方式使用场景
encodeURIComponent()Component除 A–Z a–z 0–9 - _ . ~ 外全转义
encodeURI()Full URL保留合法 URI 可直接包含的字符
URLSearchParamsform-urlencoded空格 → +,适合多参数 query 字符串
URL constructorStrict RFC 3986非法字符直接抛错,可用于验证 URL 格式
fetch()None必须自行编码后再传入
window.location.searchNone返回原始 query,需自行解码
React & fetch 代码示例

1. Build a search URL — one query param

const query = "café & boulangerie";
const url = `https://example.com/search?q=${encodeURIComponent(query)}`;
// → https://example.com/search?q=caf%C3%A9%20%26%20boulangerie

2. Multiple params — use URLSearchParams (recommended)

const params = new URLSearchParams({
  q: "café & boulangerie",
  lang: "fr",
  page: "2",
});
const url = `https://api.example.com/search?${params}`;
// → https://api.example.com/search?q=caf%C3%A9+%26+boulangerie&lang=fr&page=2

3. React component — URL state + fetch

function SearchPage() {
  const [query, setQuery] = useState("");

  const search = async () => {
    const res = await fetch(
      `/api/search?q=${encodeURIComponent(query)}`
    );
    const data = await res.json();
    // handle data…
  };

  return (
    <input
      value={query}
      onChange={(e) => setQuery(e.target.value)}
      onKeyDown={(e) => e.key === "Enter" && search()}
    />
  );
}

4. OAuth redirect_uri — encode the whole callback URL

const callback = "https://app.example.com/cb?next=/dashboard";
const authUrl =
  "https://provider.com/oauth2/authorize" +
  "?client_id=my-app" +
  `&redirect_uri=${encodeURIComponent(callback)}` +
  "&response_type=code";

5. Guard against double-encoding — test before you encode

const isAlreadyEncoded = (s) => /%[0-9A-Fa-f]{2}/.test(s);

const safeEncode = (value) =>
  isAlreadyEncoded(value) ? value : encodeURIComponent(value);

safeEncode("hello%20world"); // already encoded → "hello%20world"
safeEncode("hello world");   // not encoded    → "hello%20world"

6. Selective path encoding — encode unsafe chars, preserve /

const componentUnsafe = /[^A-Za-z0-9_.~-]/g;
const encodePath = (path) =>
  path.replace(componentUnsafe, (ch) =>
    ch === "/" ? "/" : encodeURIComponent(ch)
  );

encodePath("/résumé/2026/café");
// → "/r%C3%A9sum%C3%A9/2026/caf%C3%A9"
常用 URL 编码正则速查
正则用途说明
/%[0-9A-Fa-f]{2}/g找百分号编码字节匹配任意合法 %XX 序列,可用于检测或统计已编码字符
/%25[0-9A-Fa-f]{2}/检测双重编码%25XX 说明 % 号本身被编码了,即字符串被编码了两遍;解码一次即可修复
/[^A-Za-z0-9_.~-]/g需 Component 编码的字符每个匹配项都是 encodeURIComponent 会转义的字符,用于选择性编码或验证
/\+/g表单编码空格在 application/x-www-form-urlencoded 里 + 代表空格;调用 decodeURIComponent 前先替换成 %20
/^https?:\/\/\S+$/简单 URL 格式检查编码或请求前快速验证一个值是否看起来像 http/https URL

这个工具能做什么

免费在线 URL 编码/解码工具。把空格、& ? # 中文 emoji 等特殊字符转为 %xx 百分号编码,或反向解码。支持完整 URL 模式(只转不安全字符)和 Component 模式(连 & = # 都转,适合单个 query 参数或路径段)。 100% 浏览器本地,URL 不上传。

工具细节

输入
文本 + 结构化内容
页面会根据工具类型展示文本框、数值控件、文件选择或结构化输入。
输出
即时结果 + 复制 + 预览
结果区优先给出可操作结果,支持项会显示复制、下载或可视化预览。
隐私
可能使用网络查询
组件源码里检测到网络调用,页面会按工具逻辑处理;敏感内容建议先脱敏。
保存 / 分享
可分享链接状态
关键设置会进入 URL,复制链接后别人能复现同一组参数。
性能预算
首屏 JS ≤ 8 KB
没有声明 WASM 依赖,适合快速打开和移动端使用。
适用场景
编码加密 · 程序员
分类和职业标签用于推荐相关工具、组织内链,并帮助用户快速判断是否适合当前任务。

怎么用

  1. 1. 输入

    把内容粘贴或拖入工具面板。

  2. 2. 处理

    点击按钮,在浏览器内本地处理,文件不上传。

  3. 3. 复制 / 下载

    一键复制结果或下载到本地。

URL 编码 / 解码 适合怎么用

适合做浏览器本地的编码、解码、哈希、令牌检查和可分享转换。

适合编码任务

  • 快速检查小 payload、令牌、哈希和编码值。
  • 把值整理好再放进 API、URL、文档或客服工单。
  • 输入可能敏感时,尽量避开账号型在线工具。

编码检查项

  • 真实密钥不要随便粘贴,除非确认能接受本地浏览器处理。
  • 分享结果前确认这个操作是否可逆。
  • 哈希值要核对算法和大小写是否符合对方要求。

下一步可以接着做

这些入口会把当前任务接到更完整的工具链里。

  1. 1 Base64 编码 / 解码 文本、文件、Data URL 一站搞定,纯浏览器运行,数据不离开本地。 打开
  2. 2 HTML 实体转换 HTML 实体编码 / 解码:& < > " ' 与所有数字引用,纯浏览器本地 打开
  3. 3 Punycode / IDN 域名转换 国际化域名 Unicode ⇄ Punycode 互转:中文.中国 ⇄ xn--fiq228c.xn--fiqs8s,逐段拆解,支持邮箱,纯浏览器本地 打开

真实使用场景

  • 把带活动名的追踪链接贴进营销邮件

    你的 UTM 里活动名带空格还带 &,比如「夏季 & 秋季 2026」。整段丢进 Component 模式,会变成 %E5%A4%8F%E5%AD%A3%20%26... 那个 & 就不会把 query 字符串从中间截断。编一次,一个参数,点击照样落到正确的 utm_campaign 上。

  • 手拼一条高德或百度地图深链

    你想给「外婆家(西湖店),龙井路 12 号」生成一条地图链接。中文、逗号、 括号在裸 href 里全会出问题。只对 query 部分做 Component 编码,得到 %E5%A4%96%E5%A9%86%E5%AE%B6... 点开直接定位到那家店,而不是 404 或 一串乱码的搜索结果。

  • 排查接口为什么返回 400

    同事甩来一条 400 的 URL。贴进解码模式,藏着的 %26 和 %3D 立刻还原成 & 和 =,一眼看出是有人把一段 JSON 塞进了单个 query 参数。几秒就看清 真实结构,不用对着 40 个 %xx 干瞪眼。

  • 给 OAuth 流程编码 redirect_uri

    OAuth 要求回调地址作为一个参数传进去: ?redirect_uri=https://app.example.com/cb?next=/dashboard。里面的 ? 和 / 必须 Component 编码,否则授权方会在第一个 ? 处截断。编成 https%3A%2F%2Fapp.example.com%2Fcb%3Fnext%3D... 整条回调才能完整带回来。

常见踩坑

  • 用 Component 模式编整条 URL,它会把 :// 和 / 也转掉,https://a.com 变成 https%3A%2F%2Fa.com 就点不开了。整条链接用完整 URL 模式,Component 模式只留给单个参数。

  • 忘了 query 里字面 + 也要转义。把「1+1=2」当作 ?eq=1+1=2 发出去,服务端读成「1 1=2」。Component 编成 1%2B1%3D2 才能保住那个加号。

  • 对一个根本没编码过的值做解码。把 /a%b/c 这种路径丢进解码会报错,因为单独的 %b 不是合法的 %xx。先确认字符串里确实是完整的百分号转义再解。

隐私说明

全部在你的浏览器里跑。你粘贴的文本由内置的 encodeURIComponent / encodeURI 在本地完成编解码,不会发到任何服务器,也不会被记录。如果你开了可分享链接,编码结果会写进页面 URL 方便你分享,所以开着这个功能时别粘贴 token、带签名的 URL 或任何机密内容。

常见问题

类似工具组合

做你这行的人, 还会一起用这些。

Made by Toolora · 100% client-side · Updated 2026-07-02