URL Decode
Decode percent-encoded text back to readable characters.
How to use the URL Decode
- Paste your encoded text.
- Copy the decoded result.
About the URL Decode
Decoding turns %20 back into a space and %3D back into an equals sign, so you can actually read a link, a redirect parameter or a logged query string. Each %XX pair represents one byte, and runs of bytes are then interpreted as UTF-8 — which is why %C3%A9, two escapes, comes back as the single character é.
An honest limitation worth stating plainly: this decodes percent-escapes only. It does not turn + into a space. In query strings the + convention comes from HTML form encoding and sits alongside percent-encoding rather than replacing it, so the two collide constantly. If your input came from a form-encoded body or a query string built by an older library, replace + with a space yourself — nothing can reliably guess which plus signs were literal and which meant space.
Malformed input gets a clear error instead of a wrong answer: a stray %, an incomplete escape like %A, or byte sequences that are not valid UTF-8 are all rejected outright. Pasting a whole URL is fine — characters that are not escapes pass through untouched — though remember that a decoded URL can be ambiguous, since delimiters that were encoded on purpose become real structure again. Encode in the other direction with the URL encoder, or break an address apart with the URL parser.
Frequently asked questions
Why is + not decoded as a space?
Because strictly it is not one. In percent-encoding a space is %20; the + convention belongs to HTML form encoding and applies only inside query strings and form bodies. A + can also be a genuine plus sign, so decoding it blindly would corrupt real data. Replace them yourself when you know the source.
Can I paste an entire URL?
Yes — anything that is not a percent escape is passed through as-is, so the URL stays readable. Just be aware that the output may not be safe to reuse as a URL, because delimiters that were deliberately encoded inside a parameter turn back into real ones.
Why do I get "Invalid percent-encoding"?
The input has a % that is not followed by two valid hex digits, or the escapes form a byte sequence that is not legal UTF-8. A truncated copy-paste or a lone % in ordinary text is the usual cause.
My text still shows %2520 — what is that?
Double-encoded input. %25 is the escape for the % character itself, so %2520 decodes to %20, which decodes again to a space. Run the decode twice, then fix whatever encoded the value two times.
Is my URL sent anywhere?
No. Decoding is done by your browser on the page, so internal links, tokens and query strings stay on your machine.

