URL Encode
Percent-encode text and URLs for safe transmission.
Convert percent-encoded URL strings back to readable text using decodeURIComponent. Paste any encoded URL or query string and see the plain-text result instantly. All processing happens in your browser.
Decoding is a simple scan. The decoder walks the string one character at a time and copies everything straight through until it meets a percent sign. At that point it reads the next two characters, interprets them as a hexadecimal byte value, and writes that byte to the output. When the scan is finished, the collected bytes are interpreted as UTF-8 text.
That last step matters for non-ASCII content. Characters outside ASCII were encoded as several bytes, so %E2%82%AC is not three separate characters but one euro sign assembled from three consecutive escape sequences. A decoder that handles each escape in isolation produces mojibake.
Form submissions encode a space as a plus sign, but decodeURIComponent implements RFC 3986 and knows nothing about that convention. Feed it form data and every space comes back as a literal plus.
Beware of doing the replacement blindly. If the value legitimately contains a plus sign, for example a phone number or an email address with a plus tag, and it was correctly encoded as %2B, that escape survives the naive replace and decodes back to a plus. But a raw plus that was never meant as a space will be destroyed.
Double encoding happens when a value passes through two encoding steps, typically because one layer of a system encodes defensively and another does it again. The signature is a percent sign followed by 25, since the percent sign of the first escape gets encoded on the second pass.
The correct fix is to remove the duplicate encoding step, not to decode twice in the consumer. Blind repeated decoding is a known security hazard: filters that inspect a URL once but a downstream component decodes twice have been the root cause of path traversal and access control bypasses.
These are the characters you meet most often when working with query strings, path segments, and form data. Each one is replaced by a percent sign followed by the two hexadecimal digits of its byte value.
| Character | Encoded | Name |
|---|---|---|
| space | %20 | Space |
| ! | %21 | Exclamation mark |
| " | %22 | Double quote |
| # | %23 | Hash / fragment delimiter |
| $ | %24 | Dollar sign |
| % | %25 | Percent sign |
| & | %26 | Ampersand / parameter separator |
| ' | %27 | Apostrophe |
| ( | %28 | Left parenthesis |
| ) | %29 | Right parenthesis |
| * | %2A | Asterisk |
| + | %2B | Plus sign |
| , | %2C | Comma |
| / | %2F | Slash / path separator |
| : | %3A | Colon / scheme separator |
| ; | %3B | Semicolon |
| = | %3D | Equals / key value separator |
| ? | %3F | Question mark / query start |
| @ | %40 | At sign |
| [ | %5B | Left square bracket |
| ] | %5D | Right square bracket |
| newline | %0A | Line feed |
| tab | %09 | Horizontal tab |
Working on something related? Browse every free developer tool on the site, including a URL encoder, Base64 decoder, HTML decoder, and JSON formatter. Everything runs entirely in your browser, so nothing you paste is ever uploaded.
Percent-encoded URLs are common when working with web APIs, browser address bars, and server logs. A URL like q=hello%20world%26lang%3Den is much harder to read than q=hello world&lang=en. This decoder converts those sequences back to human-readable form so you can debug requests, inspect redirects, or read log entries without doing the conversion in your head. It uses the browser's native decodeURIComponent which correctly handles multi-byte Unicode sequences encoded in UTF-8.