← 全部工具

数据不出浏览器

URL 编码 / 解码(在线)

免费 URL encoder / decoder。对查询参数与路径做 encodeURIComponent 编解码,本地运行。

在正确的层级上编码 URL

URL 的各个组成部分适用不同规则。空格在路径和查询串里都同样编码,但加号只在查询串里表示空格;路径段内部的斜杠必须编码,而分隔路径段的斜杠绝不能编码。所以一次性编码整条 URL 反而会把它弄坏。

两个函数经常被混淆:组件编码器会转义除「未保留字符」之外的一切,适合处理单个值;URL 编码器则会保留冒号、斜杠、问号和井号等结构字符,适合处理整条地址。把前者用在完整 URL 上,会把分隔符也编码掉,最终变成一条很长的路径。

二次编码是静默失败。把一个值送进编码器两次,百分号本身也会被编码,于是服务端解码一轮之后,应用拿到的是字面量的转义序列。值到手就是乱的时,请数一数转义序列的个数,而不是看解码后的结果。

常见问题

什么时候需要 URL encode?
当文本含空格、中文或 & ? = 等保留字符,放进 query 时需要编码。
encodeURI 和 encodeURIComponent 有何不同?
本工具使用 encodeURIComponent,适合单个参数值。
数据会上传吗?
不会。编解码在浏览器本地完成。
%20 和加号有什么区别?
两者都能表示空格,但加号只在查询串里表示空格——那是更早的一套约定。在路径里,加号就是字面的加号。所以把空格编码成百分号形式,在 URL 的任何位置都是安全选择。
为什么我的 URL 被编码了两次?
因为一个值先为传输做了转义,随后作为更大 URL 的一部分又被转义了一次。每经过一轮,百分号都会变成它自己的转义序列。正确顺序是先编码各个组件,再拼装 URL,并且不要对拼好的结果再编码。
URL 里的斜杠需要编码吗?
只有当斜杠属于某个值而不是分隔符时才需要。分隔路径段的斜杠必须保持字面形式,否则整条路径会塌缩成一段;而参数值内部的斜杠必须编码,否则服务端会把它当成新的目录层级。

相关工具