三种口径与空格
在查询值内部,`encodeURIComponent` 风格的编码会转义 `&`、`=`、`/` 以及其他任何可能被误读的字符,空格变成 `%20`。对整条 URL 而言,只转义非转义不可的部分:分隔 URL 的 `&`、`/` 和 `:` 必须原样保留,否则链接就断了。表单数据里,空格变成 `+`,其余字符沿用组件规则。选择哪一种,取决于这段字符串最终落在 URL 的哪个位置。
解码则反过来,按你声明的来源口径还原。最值得注意的是加号:按组件数据解码时,`+` 仍然是 `+`;按表单数据解码时,`+` 才变成空格。页面在表单口径下的默认行为就是把加号还原成空格,因为表单编码当初正是这么写进去的。范围选错时,输出看起来“几乎对”,却会在某个参数上悄悄错位,这类问题通常比直接报错更难查。