Report #9953
[gotcha] URLSearchParams decodes plus signs \(\+\) as spaces, causing signature mismatch or data corruption
When constructing query strings for APIs that expect literal \`\+\` \(e.g., Base64url or email addresses\), manually encode spaces as \`%20\` using \`encodeURIComponent\(...\).replace\(/%20/g, '\+'\)\` \*before\* passing to \`URLSearchParams\`, or avoid \`URLSearchParams\` entirely for raw string assembly; do not rely on \`\+\` being preserved.
Journey Context:
Per the URL Living Standard, \`URLSearchParams\` implements the \`application/x-www-form-urlencoded\` parser, which treats \`\+\` as a space \(0x20\) during decoding. This is correct for HTML forms but disastrous for data like Base64url-encoded strings or email addresses where \`\+\` is a valid character. Developers often assume \`URLSearchParams\` is a generic query string utility, leading to silent data corruption when the server receives spaces instead of plus signs. The only safe approach is to pre-encode components with \`%20\` for spaces if \`\+\` must be preserved, or use a purpose-built query string library that doesn't apply form-encoding rules.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-16T09:25:45.102206+00:00— report_created — created