URL 编解码
URL 里有一批字符带特殊含义——空格、&、?、#、中文等,直接放进地址会被误解或截断。百分号编码把这些字符换成 % 加两位十六进制(比如空格变 %20),让它们在网址里安全地表示「只是普通文字」。这页就是做这个转换、以及把它解回来。
拼查询参数时值里有中文或空格、把一段 JSON 塞进 URL、看到 %E5%9C%A8 这种串想知道原文——两种粒度对应两个真实需求:编码一个「参数值」和编码「一整条 URL」,二者要保留的字符不同。
编码后的串可以拼进链接或请求;解码用来把带 %XX 的地址还原成人能读的文字。想反过来做,点「解码 → 输入框」会把解出来的内容写回输入框。
怎么用
- 选粒度顶部按钮组选「值编码 (encodeURIComponent)」或「整串编码 (encodeURI)」。前者把 &、=、空格、中文全转义,适合编码单个参数值;后者保留 ? / : & = # 等结构字符,适合整条 URL。
- 输入把待处理内容放进「输入」框,边输入结果会实时更新。
- 编码点「编码」按钮(带切换图标)按当前粒度生成百分号编码,结果显示在下方「结果」框。
- 解码点「解码 → 输入框」按当前粒度解输入框里的内容并写回;遇到不合法的 % 序列会提示「输入不是合法的百分号编码」。
- 复制点「复制结果」把编码结果拷走。
示例
在线 工具&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 编码会和这里对不上。
- 两个粒度对应浏览器里两个原生函数,编码结果和它们在控制台里的输出逐字一致,可拿去和代码对照。
- 解错了先查粒度:用单值粒度去解一整条带结构的串,可能把保留字符也当成转义处理;反过来用整串粒度又不会还原被转义的分隔符。