BaseToolbox LogoBaseToolbox
Blog

© 2025 基础工具箱。保留所有权利。

隐私政策关于联系我们

URL 编码解码常见错误:%20、%25、中文乱码怎么处理

发布于 2026年6月25日

URL 编码看起来简单,但参数一多,就很容易出现 %25、中文乱码、解码报错、参数被截断。

大多数问题来自把完整 URL、查询参数值、已经编码过的字符串混在一起处理。

编码参数值,不要乱编码整个 URL

参数值适合用组件编码:

const q = encodeURIComponent('red shoes & socks');

这样 & 不会被误认为查询参数分隔符。

不要无脑对完整 URL 使用 encodeURIComponent(),否则 https://、/、?、& 都会被编码掉。

注意重复编码

重复编码会把 %20 变成 %2520:

space -> %20 -> %2520

如果你看到 %25,很可能是值已经编码过,又被编码了一次。

百分号不完整会解码失败

如果字符串里有非法百分号转义或非法 Unicode 序列,解码时可能抛出 URIError。

这些输入都值得警惕:

abc%
abc%2
abc%ZZ

空格、加号和查询参数

空格可能写成 %20,也可能写成 +,具体取决于上下文。普通 URL 编码里 %20 更明确;表单风格的查询编码里,+ 经常会被解释成空格。

这会影响搜索词、邮箱、优惠码、Base64 风格字符串等参数。如果查询参数里本来就需要一个真正的加号,通常要编码成 %2B,否则解码后可能变成空格。

排查清单

URL 出问题时,不要把整条链接当成一个字符串乱处理,先拆开看:

| 部分 | 要检查什么 | | ---------- | --------------------------------------- | | 完整 URL | 协议、域名、路径、查询分隔符、hash。 | | 查询 key | key 本身是否需要编码。 | | 查询 value | 用户输入应该用 encodeURIComponent()。 | | 已编码值 | 除非有意,否则不要再编码 %。 |

在代码里拼 URL 时,能用 URL 和 URLSearchParams 就尽量用。它们可以减少 ?、&、=、空格和 Unicode 相关的手写错误。

简短结论

查询参数值用 encodeURIComponent(),不要重复编码已经编码过的值;解码前检查不完整的 % 序列。如果解码报错,说明输入不是合法 URL 编码。

参考资料:

  • MDN:encodeURIComponent()
  • MDN:URIError malformed URI sequence

想直接试试看?

用我们的免费在线工具,把文章里的方法马上用起来。

URL 编码解码