编码与安全指南

URL 编码:空格、加号与双重编码

按组件编码一次,保留字面加号,区分完整 URL 与查询参数值。

Nav Tools ·

按组件编码

查询值中的 & 需要转义,避免被解析为另一个参数;应编码参数值,而非整条 URL 结构。

用 URLSearchParams 传入原始值生成查询,提前编码后再传入会再次转义百分号。

new URLSearchParams({q:"a&b"}).toString()
→ q=a%26b

加号含义取决于上下文

表单式查询解析把 + 当作空格,该上下文的字面加号应写为 %2B。

单纯百分号解码未必采用表单规则,本站的组件解码和查询检查应按协议选择。

q=a+b   → "a b" in form query parsing
q=a%2Bb → "a+b"

识别重复编码

百分号会变为 %25,因此 %252F 解码一次是 %2F、两次才是 /,在路由中可能有不同含义。

不能反复解码直到看起来可读,应在系统边界约定编码层数,避免意外改变路径分隔符。

核对往返结果

用空格、字面加号、Unicode、& 组成样例,编码后解析一次,与原始值逐项对比。

接口允许重复键时要保留重复参数,直接转换成普通对象可能丢值,与编码是否正确无关。

参考资料

← 编码与安全指南