URL Decoder

Decode percent-encoded text and URLs, unwrap double encoding, locate malformed sequences and break a URL into its parts.

Runs in your browser

Encoded text or URL

On for query strings and form data; off for paths, where + is a literal plus.

Keeps decoding until no %XX sequences remain, up to 10 times.

Decoded

Decoded text appears here as you type.

Reading percent-encoded URLs

Links copied from analytics reports, server logs, redirect chains and email campaigns are often full of %20, %3D and %C3%A9. URL decoding reverses percent-encoding: each %XX is turned back into a byte, and byte sequences are reassembled into UTF-8 characters, so caf%C3%A9 reads as café again.

This decoder goes further than decodeURIComponent, which simply throws "URIError: malformed URI sequence" on the first problem. It tells you what is wrong and where — a % without two hex digits, or bytes that are not valid UTF-8 (typical of text encoded as Latin-1) — and offers a lenient mode that decodes everything it can while leaving the bad sequences untouched.

Paste a complete URL and you also get a breakdown: protocol, host, port, decoded path, fragment and a table of every query parameter with its decoded value. Parameters that are still encoded after one pass, such as a redirect= URL that was encoded twice, are flagged.

How to use the URL Decoder

  1. Paste the encoded string or full URL into the input box, or click Sample to see a URL with a double-encoded redirect parameter.
  2. Keep Treat + as a space on for query strings and form data; turn it off when decoding paths, where + is a literal plus.
  3. If the result still contains %XX sequences, enable Decode repeatedly to unwrap double or triple encoding.
  4. If you get a malformed-sequence error, fix the input at the marked position or choose Decode leniently. Copy the result or read the parameters in the URL breakdown.

Example

A redirect parameter that was encoded twice: one pass leaves it encoded, repeated decoding recovers the original URL.

Input:    next=https%253A%252F%252Fexample.com%252Fcart%253Fid%253D7
1 pass:   next=https%3A%2F%2Fexample.com%2Fcart%3Fid%3D7
2 passes: next=https://example.com/cart?id=7

Why URLs end up double-encoded

Double encoding happens when already-encoded text is encoded again, so % itself becomes %25: %20 turns into %2520. It is common with redirect and callback parameters that pass a URL inside another URL, with tracking links rewritten by email platforms, and with code that encodes values both when building a URL and again in an HTTP client. Decoding repeatedly is fine for reading such URLs, but fix the code that encodes twice rather than decoding twice on the server — repeated decoding can also turn harmless input into path traversal (%252e%252e%252f → ../), which is why security filters must decode exactly once.

Malformed sequences explained

  • `%` not followed by two hex digits, as in 100% or %G1: the literal percent sign should have been encoded as %25.
  • Invalid UTF-8, as in caf%E9: the text was encoded as Latin-1 / Windows-1252, where é is the single byte E9. Modern URLs must use UTF-8 (%C3%A9).
  • A multi-byte character cut in half, as in %E2%82: the URL was truncated, often by a length limit in a log or a database column.

Frequently Asked Questions

Why does decodeURIComponent throw "URIError: malformed URI sequence"?

The input contains a % not followed by two hex digits, or bytes that are not valid UTF-8. This tool shows the exact position; lenient mode decodes the rest and keeps the broken sequence as text.

Should + be decoded as a space?

In query strings and form submissions (application/x-www-form-urlencoded), yes. In URL paths and most other contexts, + is a literal plus sign. decodeURIComponent never converts +, while URLSearchParams always does.

Is it safe to decode a URL I do not trust?

Yes. Decoding happens in your browser as plain text; nothing is opened, requested or executed. The decoded parts are displayed, never followed.

Can I see the UTM parameters of a campaign link?

Paste the full link and the URL breakdown lists utm_source, utm_medium, utm_campaign and every other parameter, decoded. To create such links, use the UTM Builder.

How do I encode text again?

Use the URL Encoder, which offers encodeURIComponent, encodeURI, form and strict RFC 3986 modes.