在线URL编码解码

在线URL编码解码编码解码工具

URL 编码 URL 解码 复制结果

关于URL编码解码

这里用的是 encodeURIComponent 和 decodeURIComponent,和浏览器真正发请求时的处理一致,所以你看到的结果就是线上实际传的东西。

具体表现:空格变成 %20(不是 +),中文变成百分号编码的 UTF-8,&、=、?、/ 这些也会被转义——它们在 URL 里有语法含义,不转义会改变整条链接指向哪里。

+ 和 %20 的差别

表单提交(application/x-www-form-urlencoded)会把空格变成 +,encodeURIComponent 不会。所以从查询串里复制出来的值,用严格解码器处理时 + 还是加号——hello+world 解出来就是一个带加号的词。

判断方法:路径里、单个参数值里用 %20;整条查询串里出现 +,它代表空格。

encodeURI 和 encodeURIComponent 别混用

区别在 :/?#[]@ 这几个字符:encodeURI 不转义它们,所以能套在整条 URL 上;encodeURIComponent 全部转义,只能用在单个参数值上。

手工拼链接最常见的 bug 就是混用:参数里带个 &,没转义,链接直接裂成两个参数,服务端收到的值和你想的完全不是一回事。这里做的是后者,也就是编码参数值。

常见问题

为什么空格变成 %20 而不是 +?

因为这里编码的是参数值,不是表单提交。两种写法在各自场景都成立:+ 只在表单编码里代表空格,%20 在哪都能用。

中文变成一大串 %E4 是正常的吗?

正常。一个汉字是 3 个 UTF-8 字节,每个字节编成一个 %XX,所以一个字会变成 9 个字符。

该用 encodeURI 还是 encodeURIComponent?

编码单个值用 encodeURIComponent;整条已经是完整 URL、只想转义非法字符时才用 encodeURI。

为什么解码会报错?

多半是孤立的 % 后面没跟两位十六进制,或者多字节序列被截断了。这种字符串本来就不是合法的百分号编码。

同类工具

编码解码 查看全部 ›