Skip to content
cliplimeClipLime

URL decode

Turn %20, %E4%BD%A0 and friends back into readable text.

Your text stays in your browser and no URL is requested

0 characters, 0 lines

Options

Right for form data and query strings. In a path, a + is a real plus sign, so leave this off there.

Decodes line by line and keeps the line breaks.

At a glance

What it does
Turns percent-encoded text such as %20 and %E4%BD%A0 back into readable text.
Forgiving
Escapes that are not valid UTF-8 stay as typed and are listed, instead of the usual "URI malformed" error.
Plus signs
An option reads + as a space, for form data and query strings.
Double encoding
Notices leftover %XX after decoding and offers to decode again.
Query table
A URL with a query string is also split into a table of decoded keys and values, with a JSON copy.
Privacy
Decoding runs in your browser. Nothing is fetched or uploaded.

How to do it

  1. 1

    Paste the encoded text

    Paste a URL, a query string or any text with %XX escapes.

  2. 2

    Read the result

    The decoded text appears as you type. Warnings show up for broken escapes, + signs and double encoding.

  3. 3

    Adjust if needed

    Turn on Treat + as a space for form data, or decode line by line for a list.

  4. 4

    Copy it

    Copy the decoded text, or copy the parameters table as JSON.

What decoding does, and why it fails

Each %XX stands for one byte. Decoding collects those bytes and reads them as UTF-8, which is how a run like %E4%BD%A0 becomes the single character 你. JavaScript's decodeURIComponent throws "URI malformed" the moment a sequence is not valid UTF-8, for example a character cut in half such as %E4%BD, a stray % or a Latin-1 byte like %E9.

This tool decodes everything that is valid and leaves the broken sequences exactly as typed, then lists them. That is usually enough to see what is wrong with the original text.

Plus signs, %2B and %20

In form data and in most query strings, + means a space. In a path, a + is a plus sign. A literal plus inside a query value is written %2B. Because the right reading depends on where the text came from, plus signs are kept by default, with a note, and one switch turns them into spaces.

A quick check: if the text came from a search box or a form (q=red+shoes), turn the switch on. If it came from a path (/c++/guide), leave it off.

Text that was encoded twice

If decoding leaves %25 or %20 behind, the text was probably encoded twice: the first pass wrote %20 for a space, and the second wrote %25 for the percent sign, giving %2520. This happens when a value is encoded by hand and then again by a library, or when a redirect passes a URL through a second encoder.

Decode the result again to peel off the second layer. The tool shows a button for it whenever it sees leftover escapes. Note that a literal %20 can also be real text, so decode again only when the result still looks encoded.

Questions people ask

Why do I get "URI malformed" in JavaScript?

decodeURIComponent throws it when an escape is not valid UTF-8, such as a lone % or a cut-off character like %E4%BD. This tool leaves those sequences alone and lists them instead.

Why is + not turned into a space?

In a URL path a + is a real plus sign, so it is kept by default. Turn on Treat + as a space for form data and query strings.

What does %25 mean?

It is an encoded % sign. Seeing %2520 means a %20 was encoded a second time. Decode it twice to get the original text.

Can I decode a whole URL at once?

Yes. Paste it and every escape is decoded. If the URL has a query string, a table below lists each parameter with its decoded key and value.

Is the URL I paste opened or sent anywhere?

No. It is treated as plain text, decoded in your browser and never requested.