User Rating 0.0 β˜…β˜…β˜…β˜…β˜…
Total Usage 0 times
Supports %XX sequences, full URLs, and query strings
Is this tool helpful?

Your feedback helps us improve.

β˜… β˜… β˜… β˜… β˜…

About

Percent-encoding (RFC 3986) replaces unsafe ASCII characters with a % sign followed by two hexadecimal digits representing the character's byte value. A space becomes %20, an ampersand becomes %26, and an equals sign becomes %3D. Failing to decode these sequences before parsing query parameters, logging URLs, or debugging API calls leads to misread data, broken routing logic, and silent integration failures. This tool applies decodeURIComponent with a fallback byte-level parser that handles malformed sequences standard browsers would reject.

Double-encoding is a common trap: a literal %20 in source text gets encoded as %2520, and a single decode pass returns %20 instead of the intended space. This decoder detects residual percent sequences in the output and warns you. It processes all 128 ASCII code points (U+0000 to U+007F) and correctly passes through non-encoded characters unchanged. Limitations: this tool targets ASCII-range percent-encoding. Multi-byte UTF-8 sequences (e.g., %C3%A9 for Γ©) are decoded where valid but may produce replacement characters if the byte sequence is incomplete.

url decoder percent encoding ascii decoder urldecode url encoding percent decode web tools

Formulas

Percent-encoding maps each byte of a character to a triplet consisting of the percent sign and two uppercase hexadecimal digits. The decoding operation reverses this:

decode(%H1H2) β†’ char(16 Γ— hexval(H1) + hexval(H2))

Where H1 and H2 are hexadecimal digits in range 0 - 9, A - F. hexval converts a hex digit to its integer value (0 - 15). char maps the resulting integer to its Unicode code point. For ASCII, valid code points fall in the range 0 - 127 (U+0000 to U+007F).

Example: %3D β†’ 16 Γ— 3 + 13 = 61 β†’ ASCII 61 = =

The + sign in application/x-www-form-urlencoded contexts represents a space (ASCII 32). This tool optionally decodes + as space when the form-encoding mode is active. Double-encoding detection checks if the decoded output still contains %HH patterns via the regex /%[0-9A-Fa-f]{2}/.

Reference Data

CharacterASCII CodeEncoded FormCategory
(space)32%20Whitespace
!33%21Reserved (sub-delim)
#35%23Fragment delimiter
$36%24Reserved (sub-delim)
%37%25Encoding prefix
&38%26Query separator
+43%2BReserved (sub-delim)
,44%2CReserved (sub-delim)
/47%2FPath delimiter
:58%3AScheme/port delimiter
;59%3BParameter delimiter
=61%3DKey-value separator
?63%3FQuery delimiter
@64%40Userinfo delimiter
[91%5BIPv6 bracket
]93%5DIPv6 bracket
{123%7BUnsafe
|124%7CUnsafe
}125%7DUnsafe
~126%7EUnreserved
\t (tab)9%09Control character
\n (newline)10%0AControl character
\r (return)13%0DControl character
"34%22Unsafe
<60%3CUnsafe (HTML)
>62%3EUnsafe (HTML)
\92%5CUnsafe
^94%5EUnsafe
`96%60Unsafe

Frequently Asked Questions

The decodeURI function does not decode reserved URI characters like %2F (/), %3A (:), %3F (?), %23 (#), %26 (&), and %3D (=). It is designed to decode a full URI while preserving its structural delimiters. decodeURIComponent decodes all percent-encoded sequences including reserved characters. This tool uses decodeURIComponent as the primary decoder because it provides complete decoding of individual URL components such as query parameter values and path segments.
A double-encoded string occurs when an already-encoded value is encoded again. For example, a space encodes to %20, and encoding that again produces %2520 (the % itself becomes %25). A single decode pass converts %2520 to %20, not to a space. This tool detects residual percent-encoded sequences in the decoded output and displays a warning. You can then paste the output back into the input to perform a second decode pass.
In the application/x-www-form-urlencoded format (used by HTML form submissions), the + character represents a space (ASCII 32). In standard RFC 3986 percent-encoding, + is a literal plus sign and spaces are encoded as %20. This tool provides a toggle to switch between the two modes. Enable form-encoding mode when decoding query strings from HTML forms. Leave it off when decoding generic URI components.
The native decodeURIComponent throws a URIError when it encounters an invalid hex pair. This tool catches that error and falls back to a manual byte-by-byte parser that skips invalid sequences, outputting them as literal characters. The malformed triplet %GZ would appear unchanged in the output, and the tool displays a warning toast indicating that some sequences could not be decoded.
Yes, when the percent-encoded byte sequence forms a valid UTF-8 multi-byte character. For example, %C3%A9 decodes to Γ© (Latin small letter e with acute, U+00E9). However, if only part of a multi-byte sequence is present (e.g., %C3 alone), decodeURIComponent throws an error and the fallback parser outputs the raw bytes. The statistics panel distinguishes between ASCII-range decoded characters (code points 0 - 127) and non-ASCII decoded characters.
RFC 3986 Section 2.1 states that hexadecimal digits A through F in percent-encoded triplets are case-insensitive. Both %3d and %3D decode to the same character (ASCII 61, the equals sign). However, the RFC recommends uppercase for consistency when encoding. This tool decodes both uppercase and lowercase hex digits correctly.