Free URL Encoder and Decoder
Percent-encode text so it is safe to use in a URL, or decode an encoded URL back to plain text. Runs entirely in your browser.
Why URLs can't just contain any character
The URL specification (RFC 3986) reserves a small set of characters — : / ? # [ ] @ ! $ & ' ( ) * + , ; = — as structural punctuation that separates a URL's scheme, host, path, and query string. If your actual data happens to contain one of those characters (a search query with an ampersand, a filename with a space), it has to be percent-encoded so the browser and server don't misread it as URL structure. Percent-encoding is mechanically simple: take the character's byte value and write it as % followed by two hex digits — a space (byte 0x20) becomes %20, an ampersand (0x26) becomes %26.
Non-ASCII characters are encoded the same way, just with more bytes involved: a character like "é" is represented as two UTF-8 bytes, so it encodes to two consecutive %XX sequences rather than one. This is also why "Component" and "Full URL" mode matter — encoding a search-query value with "Full URL" mode would leave characters like & untouched, and an ampersand inside your data would then look exactly like the separator between two different query parameters.
Frequently Asked Questions
What is URL encoding (percent encoding)?
URLs can only contain a limited set of characters. URL encoding replaces unsafe characters with a percent sign followed by their hexadecimal value — a space becomes %20, an ampersand becomes %26 — so any text can travel safely inside a web address.
What is the difference between the two modes?
"Component" mode encodes every reserved character, which is what you want for a single value like a search query or form field. "Full URL" mode leaves URL structure characters (:/?&=#) intact, which is right when encoding a complete address without breaking it.
Why does my decoded text show + instead of spaces?
Form submissions (the application/x-www-form-urlencoded format) historically encode spaces as +. Check "Treat + as space when decoding" and the tool converts them for you.
What happens when a non-English character gets encoded?
It's first broken into its UTF-8 bytes, then each byte is percent-encoded separately — so a single accented character like "é" typically becomes two "%XX" sequences in a row, not one, since it takes two bytes to represent in UTF-8.
Why shouldn't I use "Full URL" mode to encode just a query value?
"Full URL" mode deliberately leaves structural characters like & and = untouched, assuming you're encoding an entire address. If your data itself contains one of those characters, it will be mistaken for URL structure — use "Component" mode for a single value to be safe.
Is my text sent anywhere?
No. Encoding and decoding use your browser's built-in JavaScript functions. Nothing is transmitted or stored.