Skip to content
codevory

URL Decoder

Decode percent-encoded URLs and query strings back to readable text, with exact errors for malformed sequences.

URL Decoder: the tool

Paste a percent-encoded string to decode it.

Input

Decoded

The result appears here.

How to use URL Decoder

  1. Paste the encoded URL, query string or value.
  2. Keep Decode + as space on for query strings and form data. Turn it off for paths, where + is a literal plus.
  3. Turn on Keep invalid sequences if the text contains stray % characters that are not escapes, such as 100%.
  4. A malformed sequence is reported with its position. Use Go to error to jump to it.

Example

An encoded query string. With the default options the + signs are decoded to spaces.

Encoded
q=caf%C3%A9+%26+cr%C3%A8me&lang=fr&price=%E2%82%AC5
Decoded
q=café & crème&lang=fr&price=€5

About this tool

Percent-decoding replaces each %XX with the byte it stands for and then reads the bytes as UTF-8. Several escapes in a row can make one character: %E2%82%AC is the euro sign, three bytes long.

The decoder is strict by default. A % that is not followed by two hexadecimal digits, or a run of escapes that is not valid UTF-8, is reported with its position instead of being silently altered, which makes it a useful way to find a broken link. The lenient option leaves such sequences untouched.

Decoding happens in your browser, so URLs containing tokens, session identifiers or internal host names are not sent anywhere.

Frequently asked questions

Does + mean a space?

In a query string or form body, yes. In the path of a URL, no: + is just a plus. That is why the option exists. JavaScript's decodeURIComponent never converts +.

Why do I get "Incomplete escape"?

A % must be followed by two hexadecimal digits (0-9, A-F). A text such as 100% or %zz is not a valid escape. Fix it, or enable Keep invalid sequences to leave it as it is.

What does "not valid UTF-8" mean here?

The escapes decode to bytes that do not form valid UTF-8 text. Older systems sometimes percent-encode text in Latin-1, where é is %E9 on its own. That byte alone is not valid UTF-8.

Can I decode a whole URL, not only a value?

Yes. Reserved characters such as : / ? and & are left as they are, and only the escapes are decoded. Keep in mind that a decoded URL may no longer be a valid address.

Is my URL uploaded?

No. Decoding runs locally in your browser tab.