技术与生活 / 一篇记录
查询字符串里,一个参数可以出现两次
查询字符串不是简单的键值拼接,重复参数和转义字符都应明确处理。
URLSearchParams 能保留参数结构,get 与 getAll 则表达不同的读取口径。需要多选条件的接口,应提前约定重复参数与单值参数的处理方式。
从一个例子看起
以下示例可在现代浏览器的开发者工具中观察;涉及 DOM 的代码需要在网页环境运行。
const q = new URLSearchParams({ q: 'hello world' }); console.log(q.toString());
再用 get 和 getAll 比较单值与重复参数。
排查时再往前走一步
准备空值、空格、中文和重复键,比较序列化再解析后的结果。参数顺序一般不应承载业务含义,签名等特殊协议则需要更严格的规范。
set 会替换同名参数,而 append 会增加一个条目。构造多选筛选条件时,两者差异会直接影响服务端收到的数据,示例验证中应同时覆盖新增与覆盖两种操作。
URL 参数会出现在日志或分享链接中,不应放入密码。
参考:JavaScript 文档。