URL 编码和解码

给链接、查询参数或表单正文做百分号编码,或把它还原。默认 UTF-8,和浏览器的 encodeURIComponent 一致。对方如果是 GBK 或其他编码,在字符编码里改。

网址编码为什么要分三种

一段网址里,斜线有时必须留下,有时必须变成 %2F。表单里的空格写成 +,查询串里通常写成 %20。整段用错函数,是链接打开到错误页面的常见原因。

  • 单个参数对应 encodeURIComponent。搜索词、编号、回跳地址用这个。
  • 整段网址对应 encodeURI。它保留 : / ? #,只处理空格和非 ASCII。你已经有完整地址时用它。
  • 表单正文是 application/x-www-form-urlencoded。空格变成 +。这是 POST 正文,不是链接。

怎么用

  1. 粘贴原文,或已经编码过的文字。
  2. 选择编码或解码,再选用途和字符编码。对方没特别说明时保持 UTF-8。
  3. 一组关键词各占一行时,打开“每一行单独处理”。行内的斜线仍会按所选方式编码。
  4. 解码表单正文时,让 + 表示空格。普通查询串里空格已经是 %20。
  5. 提示百分号不完整时,某个 % 后面不是两位十六进制,多半是被截断,或已经解码过一次又被当成编码串。

中文和符号怎么变

空格在链接里是 %20,在表单里是 +。参数值里真正的加号必须写成 %2B,否则服务端会把它读成空格。& 和 = 如果出现在值里面,也要编码,不然会被当成下一个参数。

默认按 UTF-8,和 encodeURIComponent 一致:中文每个字节写成 % 加两位十六进制。“北京”不是一个转义,而是一串。老接口如果要求 GBK,把字符编码改成 GBK,同一段中文会得到另一串百分号。选 Hex 时,框里按十六进制字节做百分号编码。不要用“单个参数”去编码整段 https://,否则冒号和斜线都会被换掉。字节层面可以对照 字符串转字节。Base64 是另一套,见 Base64。

常见问题

空格怎么变成了加号?

你选的是表单正文。做链接时改成“单个参数”。

解出来还有 %20。

被编码了两次。再解一次,到能读为止。

整段查询串能一次编码吗?

不能。按 & 拆开,只编码每个值,分隔符留下。“每一行单独处理”就是为了这个。