重复 Query 参数应该如何处理

理解 URL 查询字符串中的重复键、数组语义、多选筛选和覆盖风险。

为什么重复键会出现

多选筛选、checkbox 和批量资源 id 都可能产生同名参数。对 ?tag=json&tag=url&empty=,应按顺序保留两个 tag 行,并把 empty 保留为已出现但值为空的键。

有些系统使用 tags=a&tags=b 表示数组,有些系统使用 tags[]=a&tags[]=b,还有一些系统要求逗号分隔。

覆盖行为的风险

脚本若直接赋值 grouped[key] 且不检查自有属性,既可能覆盖重复值,也可能让 __proto__、constructor、toString 与继承属性冲突。应先保留有序明细,再用 Map 或安全的自有键对象分组。

建议的复核方式

先按出现顺序列出每个参数,再把重复键保存为数组。确认目标系统的规则后,再决定是否改为逗号分隔、带 [] 的键名、单个最终值或明确报错。

0

常见问题

关于本文主题

tag=a&tag=b 一定表示数组吗?

不一定。很多系统会把它解释为数组,但也有系统只取第一个或最后一个值。需要查看接收端框架或接口文档。

重复键可以用于签名 URL 吗?

可以出现,但签名规则必须明确排序、编码和重复键处理方式。调试时不要自行丢弃任何重复值。

如何把重复参数交给表格或 CSV?

先明确目标列规则。可以把数组转成 JSON 字符串、逗号分隔文本或展开为多行,但不要在未确认规则时自动覆盖。

延伸阅读

继续探索