本地处理
DEVDESK / GUIDES

URL 参数怎么编码?处理加号、中文和重复转义

搜索词含有 & 后被截断,或空格变成 %2520,通常发生在拼接 URL 的边界。先区分“完整链接”和“一个参数值”,再选择编码方式。

打开工具:URL 编解码

1. 先编码单个参数值

选择「URL 参数」,输入 a+b &中 并编码,结果应与下面一致。& 在这里属于搜索内容,必须被编码,否则拼接后可能被解释成下一个参数的分隔符。

Input:   a+b &中
Encoded: a%2Bb%20%26%E4%B8%AD
URL:     https://example.com/search?q=a%2Bb%20%26%E4%B8%AD

2. 不要把完整链接当成单个参数

参数模式会转义 ?、&、= 等符号。对整个 https://example.com/search?q=hello 使用这个模式,会把 URL 的结构也转义。完整网址模式保留这些分隔符,但它无法知道某个 & 本来是否属于参数内容。

构造请求时,优先让 URLSearchParams 处理参数值,而不是手动拼接并猜测哪里应该转义。

3. 加号和空格取决于编码约定

本站参数模式使用 encodeURIComponent / decodeURIComponent:空格编码为 %20,原文中的 + 编码为 %2B,单独解码 + 仍得到 +。表单风格的查询序列化则可以用 + 表示空格。

const params = new URLSearchParams({ q: "a+b c" });
console.log(params.toString()); // q=a%2Bb+c
console.log(params.get("q"));   // a+b c

4. 用 %2520 定位重复编码

对空格编码一次得到 %20,再把这三个字符整体编码就得到 %2520,因为 % 被编码成 %25。比较原始值、进入请求库前的值和最终 URL,找出哪一层重复处理。

解码错误也可能来自不完整的百分号字节或不同的字符编码。先保留原文,不要循环解码直到“看着正常”。

5. 从真实请求中验证最终值

在 URL 工具中做一次编码、一次解码,确认返回原文;再检查服务端实际读到的参数。curl 转换工具只调整 Shell 引号,不会替你选择参数编码,也不会执行请求。

  • 区分参数值、完整网址和作为参数传递的网址。
  • 由一层代码负责参数编码,避免请求库与业务代码重复处理。

继续动手验证