RFC 3986 Component leaves only letters, digits, hyphen, period, underscore, and tilde unescaped. Reserved delimiters such as :, /, ?, #, &, =, and + become uppercase %HH sequences based on UTF-8 bytes.
Full URL mode follows whole-URI behavior: it keeps structural delimiters and IPv6 brackets readable while encoding spaces and non-ASCII text. During decoding, escapes that protect reserved delimiters can remain encoded so URL boundaries do not change.
Form value follows application/x-www-form-urlencoded rules. Spaces serialize as +, a literal + serializes as %2B, and decoding reverses those choices. It is a profile for one form value, not a license to replace plus signs globally.
Every percent sign in decode input must have two hexadecimal digits. Valid %HH triplets must also form valid UTF-8; malformed syntax and invalid byte sequences have separate errors and are never repaired silently.
Input is limited to 1,048,576 Unicode characters and 1,048,576 UTF-8 bytes. The transformer preserves surrounding whitespace, performs exactly one requested pass, and reports actual UTF-8 bytes rather than JavaScript UTF-16 length.