URL 编解码

对网址或其中的值做百分号编码与解码,区分整串和单值两种粒度。

输入
结果

URL 编解码

URL 里有一批字符带特殊含义——空格、&、?、#、中文等,直接放进地址会被误解或截断。百分号编码把这些字符换成 % 加两位十六进制(比如空格变 %20),让它们在网址里安全地表示「只是普通文字」。这页就是做这个转换、以及把它解回来。

拼查询参数时值里有中文或空格、把一段 JSON 塞进 URL、看到 %E5%9C%A8 这种串想知道原文——两种粒度对应两个真实需求:编码一个「参数值」和编码「一整条 URL」,二者要保留的字符不同。

编码后的串可以拼进链接或请求;解码用来把带 %XX 的地址还原成人能读的文字。想反过来做,点「解码 → 输入框」会把解出来的内容写回输入框。

怎么用

  1. 选粒度顶部按钮组选「值编码 (encodeURIComponent)」或「整串编码 (encodeURI)」。前者把 &、=、空格、中文全转义,适合编码单个参数值;后者保留 ? / : & = # 等结构字符,适合整条 URL。
  2. 输入把待处理内容放进「输入」框,边输入结果会实时更新。
  3. 编码点「编码」按钮(带切换图标)按当前粒度生成百分号编码,结果显示在下方「结果」框。
  4. 解码点「解码 → 输入框」按当前粒度解输入框里的内容并写回;遇到不合法的 % 序列会提示「输入不是合法的百分号编码」。
  5. 复制点「复制结果」把编码结果拷走。

示例

输入
在线 工具&tag=a+b
输出
%E5%9C%A8%E7%BA%BF%20%E5%B7%A5%E5%85%B7%26tag%3Da%2Bb

值编码(encodeURIComponent)会把空格转 %20、& 转 %26、= 转 %3D、+ 转 %2B,确保它作为单个参数值不被曲解。

深入一点

encodeURI 和 encodeURIComponent 差在哪

encodeURI 假定你给的是一条完整 URL,所以不动 : / ? # 和 & = 这些保留字符;encodeURIComponent 假定你给的是一个值,把上述大部分都转义,连 / 也不放过。拼单个参数用后者,处理整条串用前者。

拿不准时想一句:这段内容是会被当成一整条地址直接使用,还是会被塞进某个等号后面当一个值——前者用整串,后者用单值。

+ 和空格不是一回事

百分号编码里空格是 %20;但老式表单编码用 + 表示空格。encodeURIComponent 既不会把空格编成 +,也不会把已有的 + 当空格——它把 + 转成 %2B。别把两套规则混着用。

简单记:这页统一把空格写成 %20,遇到加号要么当普通字符转义、要么原样保留,不会主动替你把它读回成空格。

重复编码会越转越长

对已经编码过的串再编一次,% 会变成 %25(%20 变 %2520)。地址里出现一堆 %2525 就是被编码了两遍,解两次才对得回去。

想避免重复编码,就把编码放在拼链接的最后一步:先各自把参数值编好再整条拼接,中途别对已经编过的片段二次动手。

注意事项

  • 转换在浏览器本地做,不请求服务器。
  • 这页只做百分号编码,不解析查询参数、不做 URL 规范化,也不校验域名对不对。
  • encodeURI 遇到非法字符抛错时,错误信息会原样显示在红色提示里。
  • 中文按 UTF-8 编成三个 %XX 是标准做法;老系统若按 GBK 编码会和这里对不上。
  • 两个粒度对应浏览器里两个原生函数,编码结果和它们在控制台里的输出逐字一致,可拿去和代码对照。
  • 解错了先查粒度:用单值粒度去解一整条带结构的串,可能把保留字符也当成转义处理;反过来用整串粒度又不会还原被转义的分隔符。

常见问题

网址里 %20 和 + 都表示空格吗

在 URL 路径和查询里标准是 %20;+ 代表空格只出现在老式表单编码里,两者规则不同,别互相代入。

encodeURI 和 encodeURIComponent 选哪个

编码单个参数值用 encodeURIComponent,处理一整条 URL 用 encodeURI,区别就在要不要保留结构字符。

为什么中文变成三个 %XX

一个 UTF-8 汉字是 3 字节,每字节编成 % 加两位十六进制,所以正好三段。

能解整条带参数的 URL 吗

能,切到「整串编码」点解码即可;但它只还原百分号转义,不会帮你把参数拆成键值。

为什么结果里全是 %25

那是被重复编码了:已编码的 % 再编一次就变 %25。解一到两次即可回到正常。

报「不是合法的百分号编码」怎么回事

输入里有 % 后面不跟两位十六进制,比如孤立的 % 或 %zz,解码器无法还原成字节。

中文参数在别处编码结果和这里不一样

多半对方按 GBK 而非 UTF-8 编码,每个中文的字节数不同、组数也不同。标准网页一律 UTF-8,这页也按 UTF-8;和老系统对接要先对齐字节口径。

能把一整条链接一次性全编好吗

别对整条用值编码,那样连分隔符都被转义、地址就失效了。正确做法是每个参数值单独做值编码,再拼回带问号和等号的完整链接。

已经带转义的串还要再编一遍吗

看用途。若要把整段作为值塞进另一个链接,需要再编一次;若它本身就是最终地址,就别再编,否则会重复变长。

能只编码空格别的都不动吗

这页只有整串和单值两种粒度,做不到精细挑选只转某几个字符。要定制得选对粒度,再把不想动的部分手工补回来。

注册后可收藏工具、跨设备同步最近使用。