Encoding 🔒 Runs in your browser — no data sent to servers

URL Decoder

Paste a percent-encoded URL or query string and read it decoded as you type, UTF-8 characters included.

Input
Output

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.

Diagram: “a b&c=é” encoded character by character into “a%20b%26c%3D%C3%A9”.CharacterUTF-8 bytesEncodeda61a␣20%20b62b&26%26c63c=3D%3DéC3 A9%C3%A9Kept as is: letters, digits, - _ . ~Escaped as %XX
Letters pass through unchanged. The space and the reserved characters & and = become %20, %26 and %3D, and é is first turned into its two UTF-8 bytes, C3 and A9, each written as %XX.

Common encoded sequences

EncodedDecodedNote
%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.

Guides