URL Decoder

Decode percent-encoded URLs and query strings back to plain text instantly. Handles %20, +, Unicode characters and all RFC 3986 percent-encoding. 100% client-side.

Encoded URL
Plain text / URL

Related Tools

Frequently Asked Questions

What is URL decoding and when do I need it?

URL decoding (percent-decoding) is the reverse of percent-encoding. When special characters like spaces, &, =, or non-ASCII letters appear in a URL, they are replaced by a % followed by their two-digit hex code (e.g. space → %20, é → %C3%A9). URL decoding converts them back to their original form.

You typically need it when reading encoded query parameters from a server log, debugging a redirect URL that looks mangled, extracting values from a URL your app received, or understanding what a third-party API is sending you.

What is the difference between %20 and + for spaces?

%20 is the standard percent-encoding for a space character per RFC 3986. It is used in path segments and is universally understood by all URL parsers.

+ as a space is part of the HTML form encoding format (application/x-www-form-urlencoded). When a browser submits a form via GET, spaces in field values are encoded as +, not %20. This only applies to query strings — a + in a URL path is a literal plus sign, not a space. When decoding, use decodeURIComponent() (handles %20) for path and URI values, and replace + with a space first when decoding HTML form data.

How do I decode a URL in JavaScript?

JavaScript provides two decoding functions. decodeURIComponent(str) decodes a single URI component (query parameter value, path segment) and converts all percent-encoded sequences including those for reserved characters like /, ?, #, &. Use this for individual values.

decodeURI(str) decodes a full URI but intentionally leaves reserved characters like /, ?, #, and & encoded so the URL structure is preserved. Use this when you have a complete URL and want to make it readable without breaking its parts.

Rule of thumb: if you encoded with encodeURIComponent, decode with decodeURIComponent. If you encoded with encodeURI, decode with decodeURI.

Why does URL decoding sometimes produce garbled characters?

The most common cause is an encoding mismatch. Modern URLs use UTF-8, so %C3%A9 decodes to é. Older systems sometimes used Latin-1 (ISO-8859-1), where the same byte sequence means something different. If you decode a Latin-1-encoded URL as UTF-8 you will get unexpected characters.

Another frequent cause is double-encoding: the value was percent-encoded twice (spaces became %2520 instead of %20). Decoding once gives %20 as a literal string instead of a space. Decode again to get the original value. Our tool performs a single decode pass — if the result still looks encoded, run it through a second time.