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.
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.