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%AD2. 不要把完整链接当成单个参数
参数模式会转义 ?、&、= 等符号。对整个 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 c4. 用 %2520 定位重复编码
对空格编码一次得到 %20,再把这三个字符整体编码就得到 %2520,因为 % 被编码成 %25。比较原始值、进入请求库前的值和最终 URL,找出哪一层重复处理。
解码错误也可能来自不完整的百分号字节或不同的字符编码。先保留原文,不要循环解码直到“看着正常”。
5. 从真实请求中验证最终值
在 URL 工具中做一次编码、一次解码,确认返回原文;再检查服务端实际读到的参数。curl 转换工具只调整 Shell 引号,不会替你选择参数编码,也不会执行请求。
- 区分参数值、完整网址和作为参数传递的网址。
- 由一层代码负责参数编码,避免请求库与业务代码重复处理。