把一段带中文的网址复制出来,经常看到一长串 % 开头的字符,比如 %E4%B8%AD%E6%96%87。这不是乱码,而是 URL 编码——HTTP 协议规定网址只能使用部分 ASCII 字符,其他字符必须用特殊形式表示。

为什么需要编码

URL 里的某些字符有特殊含义,比如 / 分隔路径、? 开始参数、& 连接参数。如果数据里本身就含有这些字符,不处理的话服务器就无法区分“这是格式符号”还是“这是数据内容”。所以协议规定:除字母、数字和少数符号外,其余字符都要转义,用 % 加两位十六进制数表示一个字节。

常见例子

  • 空格:编码为 %20。所以网址里有空格时,你会看到 %20
  • 中文“中”:按 UTF-8 编码为三个字节 E4 B8 AD,对应 %E4%B8%AD
  • &:编码为 %26,这样参数值里的 & 就不会被当成参数分隔符;
  • #:编码为 %23,避免被当成页面锚点。

反过来,解码就是把 %XX 还原成原始字符。发送中文搜索词、把文件名放进下载链接、分享带参数的活动链接,都涉及这两个方向的转换。

编码工具之间的区别

JavaScript 里常用的两个函数行为不同:encodeURIComponent() 会把 &=?/ 等全部编码,适合放在参数值里;encodeURI() 保留这些结构字符,只编码中文和空格等,适合编码整个网址。动手拼接接口参数时,用错了函数会导致服务器收到错误的参数值,这是新手最常见的坑。

怎么用本站工具

把要处理的内容粘进 URL 编码/解码工具,选择“编码”或“解码”,结果立刻显示。日常场景包括:从日志里还原被编码的中文关键词、给链接参数里的中文做转义、检查发给接口的数据是否正确。理解了编码原理之后,再看到 % 开头的字符串就不会慌了——它只是另一种书写方式而已。