URL Encoder & Decoder
Turn caf%C3%A9%20%26%20bar back into café & bar, or encode text so it is safe inside a URL. Paste a full URL and the decoder splits it into host, path and a table of query parameters; double-encoded values are unwrapped repeatedly.
Legacy pages that encoded bytes in EUC-KR instead of UTF-8 are read correctly too. Nothing leaves your browser.
Paste a string and the result appears here.
Other possible interpretations
What percent encoding is
URLs may only contain ASCII letters, digits and a handful of symbols (RFC 3986). Everything else, from spaces and & to accented letters and emoji, is written as its UTF-8 bytes, each as %XX. One accented letter becomes two bytes (é → %C3%A9) and an emoji becomes four.
Browsers render the address bar in readable form but copy the encoded version, which is why pasted links look like this.
| Text | Encoded | Notes |
|---|---|---|
| é | %C3%A9 | UTF-8, the standard today |
| é | %E9 | Latin-1 on very old sites; the decoder falls back when UTF-8 fails |
| space | %20 or + | + means space only in form data and query strings |
& = ? # / | %26 %3D %3F %23 %2F | Encoded only when they are part of a value, not when they are delimiters |
The three encoding modes
- Value (encodeURIComponent): for a single parameter value. Encodes
&=/?and everything else that is not unreserved. This is the one you want most of the time.encodeURIComponent("a&b")→a%26b. - Whole URL (encodeURI): for an already assembled address. Keeps
:/?&=#because they are delimiters and only escapes spaces and non-ASCII characters. - Form data: what an HTML form sends (
application/x-www-form-urlencoded). Spaces become+, and*'()are escaped too. Matches Python'surllib.parse.quote_plus.
Decoding accepts all three automatically. When the input contains +, the decoder also shows the reading where + is a space. Double encoding turns % into %25 (so %25C3%25A9); the decoder keeps unwrapping until nothing changes and reports how many passes it took.
When decoded text looks garbled
Output like é or ’ means the bytes were encoded in one charset and decoded in another. Typically a form was submitted as Windows-1252 or Latin-1 while the server expected UTF-8, or the other way round. The "Charset" line tells you which reading worked.
Text that was already garbled elsewhere can be repaired on the mojibake fixer. If a parameter contains Base64 or a JWT, the universal decoder keeps unwrapping it.
FAQ
I pasted a URL but no parameter table appeared.
The table appears when there is a ?name=value&name=value query string. A bare a=1&b=2 without http(s):// works too.
Another tool gives a different encoded result.
Mode differences. Value encoding escapes /; whole-URL encoding keeps it. Spaces are %20 in value and URL modes but + in form mode.
Is the URL I paste sent anywhere?
No. Conversion happens in your browser and nothing is transmitted or stored, so URLs containing session IDs or tokens are safe to paste.
Sources
- URI syntax and percent encoding: RFC 3986
- Form encoding (application/x-www-form-urlencoded): WHATWG URL Standard
- encodeURIComponent and encodeURI: MDN
Found this useful? Share it
Only the page link is shared. Your inputs and files are never included.