URL Decoder
Decode percent-encoded (%20, %2F …) URLs and query strings back into plain text.
Plus signs are turned into spaces first
Before decoding percent sequences, the decoder replaces every + with a space. That's right for query strings from HTML forms, where hello+world means "hello world".
It's wrong when the plus was meant literally and nobody encoded it, as in an unencoded Base64 value or phone number: a+b decodes to "a b". A properly encoded plus, %2B, comes through as +. If a decoded value has spaces where you expected plus signs, the sender didn't encode them, and you'll need to put them back by hand.
Double-encoded strings need a second pass
The decoder runs once. Text that was encoded twice keeps one layer of encoding:
%2520decodes to%20%252520decodes to%2520
If your output still contains %XX sequences, paste it back into the input and decode again. Seeing %25 in a URL is the usual sign that something encoded it twice.
Inputs that fail with "Invalid URL-encoded input"
- A bare percent sign.
100%fails, because % must be followed by two hex digits. An encoded percent,100%25, decodes to 100%. - Bytes that aren't UTF-8. Some older systems encoded é as
%E9(Latin-1). That fails here, while the UTF-8 form%C3%A9decodes to é. - Broken sequences such as
%zz, or a multi-byte character cut in half when a URL was truncated.
A single bad sequence fails the whole input, not only that part. If a long URL won't decode, split it and decode the pieces to find the problem.
Decoding a whole query string can hide its structure
Every sequence is decoded, including %26 (&) and %3D (=). name=Tom%20%26%20Jerry&x=1 becomes name=Tom & Jerry&x=1, and you can no longer tell which & separates parameters. To see each parameter's real value, use the URL Query String Parser, or split on & and = before decoding each value here.
Frequently asked questions
Does it matter if the hex digits are lowercase?+
No. %e2%82%ac and %E2%82%AC both decode to the euro sign.
Why are some characters made of several %XX groups?+
Each group is one byte, and anything beyond plain English letters, digits and punctuation needs between two and four bytes in UTF-8. The emoji 🙂 is four groups: %F0%9F%99%82.
Can I decode a full URL, not only a parameter?+
Yes. Paste the whole address and everything encoded in it is decoded at once. That's useful for reading a link, but don't paste the result back into a browser if it now contains spaces or a decoded &.
Will it decode HTML entities like &?+
No. Entities such as & and < belong to HTML, not to URL encoding, and pass through unchanged. Use the HTML Entity Decoder for those.
Embed this tool on your website
Free to use on blogs, school sites and intranets. Paste this code into your page's HTML; please keep the credit line.
<iframe src="https://utilityapp.lat/embed/convert/url-decode" title="URL Decoder" width="100%" height="600" style="border:0;max-width:760px" loading="lazy"></iframe> <p style="font-size:13px"><a href="https://utilityapp.lat/convert/url-decode">URL Decoder</a> by UtilityApp</p>