Advanced Options
Convert + to Spaces
When enabled, + characters will be converted to spaces. This is useful when decoding query parameters.
Live Mode
When enabled, the text will be decoded automatically as you type.
These options help you control how encoded characters are decoded in your URLs.
What is URL decoding?
URL decoding reverses percent-encoding: it reads the %XX escape sequences in an encoded URL and turns them back into the characters they stand for. That's how you recover a readable query string, form value, or path segment from a URL that a browser, API, or log line handed you encoded.
How does URL decoding work?
URL decoding follows a specific process to convert percent-encoded sequences back into their original characters:
- The input string is scanned for percent-encoded escape sequences (%XX)
- Each %XX is converted from its two hex digits back to the original byte value
- Consecutive decoded bytes are reassembled into UTF-8 characters (a multi-byte sequence becomes one character)
- In query-string context, + is decoded to a space (application/x-www-form-urlencoded), while %2B stays a literal +
- Unreserved characters and already-decoded text pass through unchanged
Why use a URL decoder?
- Readable output: turn %20, %40, and %3D back into spaces, @, and = so you can read what a URL actually says
- International text: rebuild accented and non-ASCII characters from their UTF-8 byte sequences, so %C3%A9 reads as é again
- Debugging: inspect the real values inside a query string, OAuth redirect, or webhook payload before you act on them
- Standards-correct: decode per RFC 3986, the same rules browsers and servers use, so you see exactly what they see
What are common applications of URL decoding?
URL decoding is essential in many web development scenarios:
- Form Submissions: reading the original field values back from application/x-www-form-urlencoded GET and POST data
- API Development: unpacking percent-encoded path and query parameters that arrive at an API endpoint
- File Systems: recovering file paths and names that were percent-encoded to travel inside a URL
- Debugging Links: decoding shared or logged URLs to see the special characters and international text they carry
What does a URL decoding example look like?
Here are some common examples of URL decoding: %20 (or +) becomes a space, %40 becomes @, %23 becomes #, %26 becomes &, and %3D becomes =. A UTF-8 sequence like %C3%A9 becomes the international character é.
What is percent-encoding?
Percent-encoding is the mechanism defined by RFC 3986 §2.1 for representing characters that are unsafe or reserved inside a URI. The rule is mechanical: each byte that cannot appear literally is written as a percent sign followed by two hexadecimal digits — the %XX form — where XX is the byte's value. Non-ASCII characters such as é are first encoded as their UTF-8 byte sequence, then each byte is percent-encoded individually. Developers encounter this almost daily: in query strings, form submissions, OAuth callback URLs, REST API path parameters, and anywhere a URL must carry punctuation, spaces, or characters outside the unreserved set A–Z a–z 0–9 - _ . ~.
How does decoding %C3%A9 to é actually work?
Take the encoded query string ?q=caf%C3%A9&lang=fr. Decoding produces ?q=café&lang=fr. Here is the byte-by-byte walk-through:
- Input:
?q=caf%C3%A9&lang=fr - Output:
?q=café&lang=fr
%C3→ byte0xC3(binary11000011) — the lead byte of a 2-byte UTF-8 sequence.%A9→ byte0xA9(binary10101001) — the continuation byte. Combined,C3 A9is the UTF-8 encoding of U+00E9, which isé.- The characters
?,=, and&are left untouched because they are structural — they delimit the query and its key/value pairs. The literalcafis also passed through, since lowercase ASCII letters belong to the unreserved set.
What's the difference between decodeURIComponent and decodeURI?
JavaScript exposes two built-in decoders, and confusing them is one of the most common URL-handling bugs:
decodeURIComponent(str)decodes every percent-encoded sequence, including reserved characters such as&,=,?,/, and#. Use it on individual query-string values or path segments — never on a whole URL.decodeURI(str)is intentionally conservative: it skips reserved characters. Feeding it%26returns the literal string%26, not&. It is meant for whole URIs where you want the structure to survive a round trip.
Rule of thumb: if the string is a piece of a URL (a single parameter, a fragment, an encoded filename), reach for decodeURIComponent. This tool behaves like decodeURIComponent — every %XX sequence in your input is decoded, including reserved characters.
Decoding a URL is how you read what it really contains. Paste an encoded string above and every %XX sequence turns back into its character right in your browser, so you can debug a query parameter, check an OAuth redirect, or recover an accented filename without sending anything to a server.