URL Percent Decoder (Multi-Pass)
Paste percent-encoded text (URL-encoded), get the decoded version. Auto-detects double or triple encoding (common when URLs are nested in query parameters or passed through multiple systems) and unwinds them all. Companion to our URL Encoder.
How to use the URL Percent Decoder (Multi-Pass)
Paste percent-encoded text (anything with %XX escape sequences). Multi-pass detects when the result is still percent-encoded and decodes again, up to 5 passes — useful for URLs that have been encoded multiple times (common when redirecting through intermediaries). Default encoding is UTF-8, the modern web standard.
About URL Percent Decoder (Multi-Pass)
URL percent-encoding (RFC 3986) escapes characters that aren't safe in URLs as %XX hex sequences. space becomes %20, ? becomes %3F, and so on. Decoding reverses that. The wrinkle is multi-pass encoding: when a URL is passed as a query parameter to another URL, the inner URL gets encoded again, so % becomes %25, and the result might decode to something that still has %XX sequences. Multi-pass mode keeps decoding until no more escape sequences remain.
Browsers, servers, and APIs handle URL encoding inconsistently. Some always use UTF-8 (the modern default), some still use the old ISO-8859-1 convention, some use form-encoding (+ for space instead of %20). This decoder defaults to UTF-8 and accepts both %20 and + for spaces in query-string contexts.
Common use cases
- Reading server logs — translate encoded request paths back to human-readable URLs.
- Debugging redirects — figure out what an encoded redirect parameter actually points to.
- OAuth state debugging — many OAuth flows nest encoded URLs in callbacks.
- Email tracking links — see the actual destination behind a tracking redirect.
Frequently asked questions
When would I need ISO-8859-1?
Does it handle plus signs?
+ decodes to space, the form-encoded convention. If you have a literal plus in a non-query context, encode it as %2B before decoding.What does multi-pass do exactly?
%XX sequences. If found, decode again. Stops when no more escapes are present or after 5 passes (safety limit).