URL Decode and Encode
Paste a percent-encoded link to decode it into readable text, or paste text to encode it for a URL: "caf%C3%A9%20au%20lait" decodes to "café au lait". Encode a single query value, or a full URL with its structure intact.
The preview is shortened. Copy and Download include the whole result.
Your text never leaves your device.
How to use
- Choose Decode to make an encoded URL readable, or Encode to prepare text for a URL.
- For encoding, leave Full URL off for a single value (a search term, a parameter) and turn it on for a complete address.
- Copy the result. Broken percent sequences are reported with their position.
Examples
- Before
- caf%C3%A9%20au%20lait
- After
- café au lait
- Before
- rock & roll / 50% off?
- After
- rock%20%26%20roll%20%2F%2050%25%20off%3F
- Before
- https://example.com/search?q=café au lait&page=2
- After
- https://example.com/search?q=caf%C3%A9%20au%20lait&page=2
Why URLs need encoding
A URL may only contain a limited set of ASCII characters. Some of them have jobs: / separates path segments, ? starts the query, & and = separate parameters, # starts the fragment. Everything else, including spaces, accented letters, Cyrillic, emoji and those special characters when they appear inside a value, has to be written as % followed by the two-digit hex code of each byte (RFC 3986).
Non-ASCII characters are first converted to UTF-8 bytes, which is why a single letter can become several sequences: é is %C3%A9, ж is %D0%B6.
Which characters each mode encodes
- Value mode (Full URL off) leaves only A–Z, a–z, 0–9 and - _ . ! ~ * ’ ( ) unencoded. Use it for one query parameter value or one path segment.
- Full URL mode additionally keeps : / ? # [ ] @ $ & + , ; = so the address keeps its structure. Use it for a whole link with spaces or non-ASCII letters in it.
- Decoding reverses both. In full URL mode, encoded structural characters such as %2F and %3F stay encoded, so decoding never changes where the path or query ends.
Common mistakes
- Encoding a whole URL in value mode. “https://example.com” becomes https%3A%2F%2Fexample.com, which is right inside another URL’s parameter but is not a working link. Use Full URL mode for links.
- Building query strings by hand without encoding. A value with & or # silently cuts the URL short. Encode each value separately, then join them with & and =.
- Encoding twice. %2520 and %253A are signs of a double-encoded value.
- Decoding form data without handling +. In form submissions + means a space; this decoder keeps it as a plus.
Frequently asked questions
How do I decode a URL?
Choose Decode and paste the URL or the encoded part. Every %XX sequence is turned back into its character, including multi-byte UTF-8 sequences such as %C3%A9 for é and %F0%9F%91%8D for 👍. The result is readable text you can copy.
What is the difference between encoding a value and a full URL?
A value, such as a search term, must not contain characters that structure a URL, so & = / ? # and : are encoded too: "rock & roll" becomes rock%20%26%20roll, and the & cannot be mistaken for a parameter separator. Full URL mode keeps those structural characters and encodes only spaces and characters that are not allowed, so the link still works. These match JavaScript's encodeURIComponent and encodeURI.
Should a space be %20 or +?
In a URL path, a space must be %20. In a query string, HTML forms send spaces as + (the application/x-www-form-urlencoded format), and most servers accept both there. This tool encodes spaces as %20, which is valid everywhere, and decodes + as a literal plus sign. If you are decoding form data, replace each + with a space first.
What does "broken percent-encoding" mean?
A % must be followed by two hexadecimal digits. "100%" at the end of a string, or "%G1", is not valid, and the decoder reports the position. If the text simply contains a percent sign, it was never encoded; encode it, and % becomes %25.
Why do I see %2520 in my URL?
It is double encoding: a space became %20, and then the % itself was encoded again as %25. Decoding once gives %20, decoding twice gives the space. Find the step in your code that encodes an already encoded value.