URL decoder
Turn a percent-encoded URL back into plain text.
Runs in your browser. Nothing you type is sent anywhere.
- Clear error on bad input
- Plus as space option
- Works offline
How to URL decode text
- Paste the encoded text.
- Turn on treat + as space if it came from a web form.
- Copy the decoded result.
Example: encoded in, decoded out
| Encoded | Decoded |
|---|---|
| Hello%20World | Hello World |
| a%2Bb | a+b |
| caf%C3%A9 | cafe (with an accent) |
| a+b, with plus as space on | a b |
Why decoding can fail
- A % that is not followed by two valid hex digits, often a literal % that was never meant to be encoded, such as a discount code like SAVE10%.
- Text copied from two different sources, where part is already decoded and part is still percent-encoded.
- Encoded bytes that do not form valid UTF-8, which happens if the text was encoded with a different character set.
Where an encoded URL comes from
- A browser address bar, which encodes special characters in whatever you typed or pasted.
- Server logs and query strings shared in a bug report or support ticket.
- Webhook and redirect links, which are worth decoding and reading before you trust them.
- A tracking or analytics link, where decoding shows the exact parameters and values a click will send.
URL decode FAQ
Why do I get a decode error?
It means the text has a percent sign that is not followed by two valid hex digits, so it is not properly percent-encoded.
Should I always turn on plus as space?
Only when the text came from a form or query string, where a literal + character means a space. A path or a base64 value can genuinely contain a +.
Is this the same as un-escaping a URL?
Yes, this reverses standard percent-encoding used in URLs, query strings and form data.
Does this follow the same standard as the URL encoder?
Yes. It reverses RFC 3986 percent-encoding using JavaScript's built-in decodeURIComponent.
What if my text has a literal percent sign that was never encoded?
It causes a decode error unless the % is followed by two valid hex digits. Encode a literal percent sign as %25 before decoding the rest of the text.
Can it decode a full URL with a query string?
Yes, paste the whole address. Everything that was percent-encoded, including values inside the query string, is decoded at once.
Which JavaScript function does this wrap?
decodeURIComponent, with an extra option to treat a + character as a space, which decodeURIComponent alone does not do, since + is only a space convention in form-encoded data.
Does decoding change plain letters and digits?
No. They were never encoded in the first place, so they pass through unchanged.