URL 中的 %20、+ 和 %2520 分别意味着什么
轻工具编辑 · 配置与数据处理
用查询参数示例区分 URI 组件编码与表单编码,定位加号、中文乱码和重复编码问题。
先确定你处理的是参数值还是整个地址
假设想传递搜索词 hello world。对这个参数值使用 encodeURIComponent,会得到 hello%20world。把它放进 /search?q=hello%20world 后,问号和等号仍用于分隔参数。若把整个地址一起编码,斜杠、问号和等号都会变成编码字符,这通常不是你想要的请求地址。
加号并不在所有场景下都代表空格
在 application/x-www-form-urlencoded 语境中,加号可以表示空格;普通 URI 组件解码则不会自动把 + 改成空格。因此 decodeURIComponent('a+b') 仍得到 a+b,而 URLSearchParams 解析表单式查询参数时有不同处理。先确认输入来自表单、地址栏还是程序编码函数,再选择解析方式。
%2520 往往暴露了重复编码
百分号本身编码为 %25。如果一段已经包含 %20 的字符串又被编码,结果就会出现 %2520。比如后端期望编码一次,而前端和请求库各编码一次,就可能产生这个结果。应明确由哪个环节负责编码,而不是让服务器无限次解码直到字符串看起来正常。
用三个值做回归检查
建议用 hello world、a+b 和 中文/路径 作为脱敏测试值。分别记录原值、发送的查询字符串和服务端读取的值。确认空格没有被保留成百分号字面量、加号没有丢失、斜杠没有意外变成路径分隔。传输编码不能替代输出转义、权限检查或参数化查询。
相关工具
内容如有错误,请通过联系页面提交脱敏样例和预期结果。