Encoding

Decode percent-encoded text

Percent-decoding turns %20, %26 and friends back into the characters they stand for. Frontend developers decode query values and redirect URLs to see what a link really sends; support engineers read the same strings in server logs. The tool follows decodeURIComponent rules: UTF-8 escapes like %E2%82%AC become the euro sign, a malformed sequence such as a bare % is reported as an error, and a literal + stays +.

How to use URL Decode

  1. Open URL Decode in the Toolbox101 app.
  2. Paste the percent-encoded string (from a log line, network tab, or copied link) into the Input box.
  3. Read the decoded text in the Output box as soon as you paste.
  4. Click Copy to grab the plain text result.

Worked example

URL Decode returns the output below for this input.

Input

q%3Dhello%20world%26lang%3Den

Output

q=hello world&lang=en

Check it yourself: open URL Decode and enter the same input.

Frequently asked questions

Why do I get a "Malformed percent-encoding" error?

Every % must be followed by exactly two hex digits, and the escaped bytes must form valid UTF-8. A bare percent sign, a truncated escape such as %2 or an invalid pair like %zz fails that rule. The usual cause is text that was never encoded, or input that was decoded once too often, so literal percent signs now look like broken escapes.

Why does + decode as + instead of a space?

Because in percent-encoding, a space is %20, not +. The plus-as-space convention belongs to HTML form encoding (application/x-www-form-urlencoded), which decodeURIComponent does not implement: a literal + returns unchanged. If your string came from a form body, replace + with %20 before pasting, or decode it with a form parser.

Does this decode UTF-8 characters like emoji?

Yes. Escapes encode UTF-8 bytes, and decodeURIComponent reassembles them: %E2%82%AC becomes the euro sign and a percent-encoded emoji returns to its original character. The input itself should be pure ASCII escapes; if you paste raw characters that were never encoded, they pass through unchanged, which is correct.

How do I decode text that was encoded twice?

Run it through the decoder twice. Double encoding turns a space into %2520: the first pass yields %20 and the second yields the space. This tool removes one layer per pass, so paste the output again to peel the next layer. If the second pass errors with URI malformed, the input was single-encoded all along.

Use URL Decode now

Runs in your browser. Nothing you type is uploaded.