免费工具 URL 解码 / 编码在线工具
分享出去的链接里一长串 %E6%98%A5%E5%AD%A3,日志里的中文参数全是乱码?贴进来就能还原成汉字。反过来,要把中文活动名、带 & 的参数放进链接,先在这里编码。
- 中文网址转码
- 边输边转换
- 本地处理
URL 解码或编码
示例是一条带中文搜索词和活动名的链接。切换模式对比结果,或者贴上你自己的内容。
整个输入框一起处理,换行也算在内。
https://example.com/search?q=春季 促销&utm_campaign=双11编码时空格写成 %20;中文等非 ASCII 字符按 UTF-8 字节编码。
分享这组输入:数值写在链接的 # 后面,不会发到服务器。
https://tapcub.com/zh/tools/url-encoder-decoder
版本 v1.0更新于 更新记录
选哪种模式,结果怎么看
两种编码模式的区别只在于哪些符号保留不动。选错模式,是网址出问题最常见的原因。
编码参数值
用 encodeURIComponent。除了字母、数字和 - _ . ! ~ * ' ( ),其它全部编码,包括 &、=、?、/、#。要放在 = 后面的单个值(活动名、搜索词、跳转地址)都用它。
编码整条网址
用 encodeURI。保留构成网址结构的符号(: / ? & = # 等),只编码空格、中文这类字符。适合把一整条含中文路径的链接变成能直接发出去的形式,不适合编码单个参数值。
解码
把每个 %XX 还原成字符。勾选「把 + 当空格」时先把 + 换成空格,这是表单提交的编码方式;真正的加号会编码成 %2B,照样解出 +。
%XX 怎么读
每个 %XX 是一个字节的十六进制。英文字母和符号占 1 个字节(空格是 %20),一个汉字按 UTF-8 占 3 个字节,所以「中」是 %E4%B8%AD,九个字符;大多数 emoji 占 4 个字节。
整条网址解码只用来看内容。不要把解码后的网址再当链接用:参数值里原本编码过的 &、= 解码后变成了真正的分隔符,链接的意思就变了。
三步用完
放进链接之前编码,要看懂链接时解码。
-
1
选模式
=后面的值选「编码参数值」;整条带中文的链接选「编码整条网址」;满是%的字符串选「解码」。 -
2
粘贴内容
结果随输入实时更新。解码时「把 + 当空格」一般保持勾选,除非内容里有必须保留的加号。
-
3
复制并核对
从代码块复制结果。想确认编码没问题,切到「解码」再贴回去,应该得到原文。
两种模式各编码哪些字符
网址里只能出现有限的 ASCII 字符(RFC 3986)。其它字符先转成 UTF-8 字节,每个字节写成「% + 两位十六进制」,所以 URL 编码也叫百分号编码。
- 每个参数值单独编码,再用
&和=拼起来 - 浏览器地址栏显示的是解码后的中文,实际发出去的是编码后的形式
- 十六进制不分大小写:
%2f和%2F解码结果相同
| 字符 | 编码参数值(encodeURIComponent) | 编码整条网址(encodeURI) |
|---|---|---|
字母、数字、- _ . ! ~ * ' ( ) | 不变 | 不变 |
| 空格 | %20 | %20 |
& = ? / | %26 %3D %3F %2F | 不变 |
: # + @ | %3A %23 %2B %40 | 不变 |
% | %25 | %25 |
中 | %E4%B8%AD | %E4%B8%AD |
双11 | %E5%8F%8C11 | %E5%8F%8C11 |
四个常见场景
中文活动名、中文路径、编码两次、GBK 老链接,分别会得到什么结果。
| 输入 | 模式 | 结果 | 说明 |
|---|---|---|---|
双11 大促 | 编码参数值 | %E5%8F%8C11%20%E5%A4%A7%E4%BF%83 | 正确:放进 utm_campaign= 后面完整传过去 |
https://example.com/活动/双11?来源=公众号 | 编码整条网址 | https://example.com/%E6%B4%BB%E5%8A%A8/%E5%8F%8C11?%E6%9D%A5%E6%BA%90=%E5%85%AC%E4%BC%97%E5%8F%B7 | / ? = 保留,链接结构不变,可以直接用 |
%25E4%25B8%25AD | 解码 | %E4%B8%AD | 被编码了两次,再解码一次才得到「中」 |
%D6%D0%CE%C4 | 解码 | 报错 | 这是 GBK 编码的「中文」,本工具按 UTF-8 解码 |
GBK 编码的链接多见于早期的中文网站和部分老系统(一个汉字 2 个字节,如「中」是 %D6%D0)。现在的网页、接口和浏览器基本都用 UTF-8(一个汉字 3 个字节)。
URL 编码常在哪出错
下面这些情况,链接都能打开,但带过去的数据是错的。
参数值用了整条网址编码
encodeURI 不编码 &、=、#,参数值里有这些符号时,查询串会被拆开或截断。
整条链接当参数值编码
「编码参数值」会把 https:// 变成 https%3A%2F%2F。放在跳转参数里是对的,单独当链接用就打不开了。
重复编码
对已经编码过的字符串再编码一次,每个 % 都会变成 %25。看到 %25 后面跟两位十六进制,就再解码一次。
+ 和 %20 混用
表单和 PHP 的 urlencode、Java 的 URLEncoder 把空格编成 +,JS 编成 %20。真正的加号要写成 %2B,否则按表单规则解析时会变成空格。
推广链接,报表里干干净净
编码让活动名完整地进到链接里;访客落地后由 TapCub 接手:从网址里读取 UTM 参数和广告点击 ID,把来源记在访客身上。
URL 编码是什么?
也叫百分号编码:网址里不允许出现、或者有特殊含义的字符,换成「% + 两位十六进制」。空格变成 %20,& 变成 %26,中文先转成 UTF-8 字节再逐个编码,所以一个汉字变成 9 个字符。
网址里的中文乱码怎么还原?
把那串 %E4%B8%AD%E6%96%87 这样的内容贴进来、模式选「解码」,就会显示成「中文」。如果报错,可能是链接被截断了一半,或者是 GBK 编码的老链接,这个工具只按 UTF-8 解码。
encodeURIComponent 和 encodeURI 有什么区别?
encodeURIComponent 会编码网址里所有有特殊含义的符号,适合编码单个参数值;encodeURI 保留 : / ? & = #,让整条网址仍然可用,所以不能拿来编码参数值。拿不准时,每个值用 encodeURIComponent 编码,再拼成网址。
空格应该编码成 %20 还是 +?
都常见。%20 在网址任何位置都成立;+ 只在按表单方式(application/x-www-form-urlencoded)编码的查询串里表示空格。这个工具编码时用 %20,解码时两种都能处理。
PHP 的 urlencode 和 rawurlencode 有什么区别?
主要差在空格:urlencode 按表单规则把空格编成 +,rawurlencode 编成 %20,后者和这里的「编码参数值」更接近。Java 的 URLEncoder.encode 也是表单规则;Python 里对应 quote_plus 和 quote。
UTM 参数里的中文要不要编码?
要。值里有中文、空格、& 或 # 都应该编码。UTM 链接生成器会自动编码每个值;更省事的做法是活动名用英文小写加下划线,比如 double11_sale,就不用操心编码。
贴进来的内容会上传吗?
不会。编码和解码都在你的浏览器里完成,不会发给 TapCub。分享链接把内容放在网址 # 后面,这一段浏览器不会发给服务器;但拿到链接的人都能看到,所以带 token 或签名的网址不要分享。