Postman中+号变空格是因为Params参数拼接在URL中,而URL规范将+视为空格;应改用form-data或x-www-form-urlencoded方式提交,避免特殊字符被转义。

Postman里+号变空格,是因为参数拼在URL里了
只要参数填在 Params 标签页,Postman 就会把它们自动拼到 URL 后面,比如 https://api.example.com/login?name=a+b&token=abc。而 URL 规范里,+ 就代表空格,所以后端收到的 name 实际是 "a b",不是你传的 "a+b"。
这不是 Postman 的 bug,是 HTTP 协议本身的行为。其他常见陷阱还有:/ 被当成路径分隔符、= 和 & 被当成参数分隔符、{} 或 [] 直接导致 400 错误。
- 别在
Params里传含+、/、=、{、}、[、]的表单字段 - 如果必须用
GET且带这些字符,得手动encodeURIComponent()编码(但不推荐,易漏) - 更稳妥的做法:把这类参数全挪到请求体里
表单数据该放 form-data 还是 x-www-form-urlencoded
两者都不拼 URL,所以都可避免特殊字符被误解析,但语义和后端接收方式不同:
-
form-data:适合混合内容(比如同时传文本字段 + 文件),底层用multipart/form-data编码,每个字段独立边界,+、/等原样透传,后端按 multipart 解析 -
x-www-form-urlencoded:纯键值对,类似 URL 编码格式(key1=value1&key2=value2),+仍表示空格,%2B才是真正的加号 —— 所以如果你要传phone=138+8888,得写成phone=138%2B8888 - 多数 Spring Boot / Django / Express 默认只解析
x-www-form-urlencoded的普通表单;若用form-data,需显式声明接收@RequestPart或multipart类型
JSON 字符串当表单字段传,必须双重编码
比如字段 biz_content 的值是 JSON 对象 {"id":1,"tags":["a","b"]},直接塞进 x-www-form-urlencoded 会失败:大括号、引号、方括号全是非法字符。
正确做法是先把它序列化成字符串,再做 URL 编码:
Postman Mac版是一款专为macOS设计的API开发与测试工具,凭借简洁的界面和强大的功能,深受开发者喜爱。它支持发送各种HTTP请求(GET、POST、PUT等),轻松管理接口集合、环境变量和模拟服务器。Mac用户可享受原生性能、快捷键优化及与系统无缝集成的体验,适用于接口调试、自动化测试和文档生成。无论是个人项目还是团队协作,Postman for Mac都能提升API开发效率,是ma
- 第一步:用
JSON.stringify({"id":1,"tags":["a","b"]})→ 得到"{\"id\":1,\"tags\":[\"a\",\"b\"]}" - 第二步:对这个字符串整体做
encodeURIComponent()→ 得到类似%7B%22id%22%3A1%2C%22tags%22%3A[%22a%22%2C%22b%22]%7D - 最终在
x-www-form-urlencoded中填:biz_content=%7B%22id%22%3A1%2C%22tags%22%3A[%22a%22%2C%22b%22]%7D - 如果用
form-data,只需第一步(不用 URL 编码),Postman 会自动处理边界和转义
Postman 自带的 encode/decode 功能在哪找
不用手算 %2B 这种编码,Postman 界面右上角有个 EncodeURIComponent 按钮(图标是 ⋯ → EncodeURIComponent),点它就能把选中的文本一键编码。
反向解码也一样:把编码后的字符串粘贴进去,点 DecodeURIComponent 就能还原。这个功能藏得有点深,很多人测试时反复试错半天,其实就差点一下。
注意:它只对当前选中文本生效,不会自动编码整个 Body;批量字段多的时候,建议先在控制台用 encodeURIComponent() 处理好再粘贴。










