URL Decoder
Paste a percent-encoded URL or query string and read it decoded as you type, UTF-8 characters included.
Decode URL-Encoded Text
URLs can only carry a limited set of characters, so everything else is percent-encoded: spaces, accents, non-Latin scripts and the characters that have special meaning in a URL such as &, = and ?. Log files, redirect parameters, UTM tags and API errors are full of these sequences, and decoding them is the quickest way to see what was actually sent.
This page opens the URL Encoder & Decoder set to decode as you type. Everything runs in your browser.
Common encoded sequences
| Encoded | Decoded | Note |
|---|---|---|
%20 or + | space | + only means a space in form data |
%2F | / | A slash inside a parameter value |
%3F %3D %26 | ? = & | Query syntax used as data |
%25 | % | A literal percent sign, or a sign of double encoding |
%C3%A9 | é | Two UTF-8 bytes for one character |
%E2%82%AC | € | Three UTF-8 bytes |
Double-encoded URLs
When a URL is placed inside another URL, for example as a redirect or url parameter, it is often encoded twice. You will recognise it by %25 everywhere: %252F is an encoded %2F, which is an encoded slash. Decode, check whether %25 is still there, and decode again until it is gone.
When decoding fails
The decoder uses the same rules as a browser's decodeURIComponent. It reports an error if a percent sign is followed by something other than two hex digits, as in 100%, or if the bytes do not form valid UTF-8, which happens with very old systems that encoded text as Latin-1 (%E9 for é instead of %C3%A9).
URL decoding in code
- JavaScript:
decodeURIComponent(s.replace(/\+/g, ' ')) - Python:
urllib.parse.unquote_plus(s) - PHP:
urldecode($s) - Java:
URLDecoder.decode(s, StandardCharsets.UTF_8)
To inspect every parameter of a URL, decode the whole query string first. For Base64 values found in URLs, which often end in %3D, decode here and then use Base64 Decode.