URL Encoder & Decoder
Paste a link or any text. Decode the %20s and %C3%A9s back into words, or encode text so it is safe to put in a link.
3 escapes turned back into text — it looked encoded.
This link has 3 UTM tags: check them in the UTM Link Checker to see where Google Analytics files the visit.
What each escape was
%C3%A9 | é |
%20 | (a space) |
The link, part by part
- Site
- example.com
- Page
- /recipes/café-latte
- utm_source
- utm_medium
- social
- utm_campaign
- fall drinks
Encoded three ways
As one value a space is %20: a UTM value, a search term, a link inside a link
https%3A%2F%2Fexample.com%2Frecipes%2Fcaf%C3%A9-latte%3Futm_source%3Dpinterest%26utm_medium%3Dsocial%26utm_campaign%3Dfall%20drinksAs a whole link keeps : / ? & = # so the link still works
https://example.com/recipes/caf%C3%A9-latte?utm_source=pinterest&utm_medium=social&utm_campaign=fall%20drinksAs a form sends it a space is +, and ! ' ( ) ~ are encoded too
https%3A%2F%2Fexample.com%2Frecipes%2Fcaf%C3%A9-latte%3Futm_source%3Dpinterest%26utm_medium%3Dsocial%26utm_campaign%3Dfall+drinksThe rules: RFC 3986, section 2 and the WHATWG URL Standard (the + for a space). Checked 27 September 2026.
Quick answer: URL encoding, also called percent-encoding, writes a character a link cannot hold as a % and two hex digits: a space is %20, an & is %26, and é is %C3%A9, its two UTF-8 bytes. Decoding turns them back into text. Paste a link or some text above to do either. The tool also tells you when a link was encoded twice, when an escape is broken, and when a character you cannot see is hiding in it.
How to use it
- Paste a link or some text. Nothing is fetched and nothing leaves your browser: the text is only read.
- Decode or encode. The tool picks the one your text looks like it needs: text with
%escapes in it is decoded, plain text is encoded. Tap the other button to switch. - Copy the answer, or one of the three encoded forms under it. For a link, read its parts. The site, the page and each tag after the
?are shown with their values decoded. - A link with UTM tags goes to the UTM link checker in one tap, to see where Google Analytics will file the visit.
The escapes you will meet most
| Character | In a value | In a form |
|---|---|---|
| a space | %20 | + |
& | %26 | %26 |
= | %3D | %3D |
? | %3F | %3F |
# | %23 | %23 |
/ | %2F | %2F |
: | %3A | %3A |
+ | %2B | %2B |
% | %25 | %25 |
@ | %40 | %40 |
, | %2C | %2C |
' | ' | %27 |
é | %C3%A9 | %C3%A9 |
’ (curly) | %E2%80%99 | %E2%80%99 |
Letters, digits and - . _ ~ never need encoding: RFC 3986 calls them "unreserved". A curly apostrophe is the one that surprises people. It comes in when a pin title or a campaign name is pasted from a document, and it turns one character into nine in the link.
One value, a whole link or a form: which to copy
- As one value is for text that goes inside a link: a UTM campaign name, a search term, or a whole link passed as
?url=…. Everything that could be read as part of the link is escaped, and a space is%20. The WHATWG URL Standard says this set "gives identical results to JavaScript's encodeURIComponent()". - As a whole link keeps
: / ? & = #as they are, so the link still works. Only spaces and characters a link cannot hold are escaped. An escape that is already there is kept, not encoded again. - As a form sends it is what a search box or
URLSearchParamsproduces: a space becomes+, and! ' ( ) ~are escaped too.
%2520: when a link is encoded twice
The % sign starts every escape, so a real % "must be percent-encoded as "%25"", in RFC 3986's words. Encode %20 a second time and it becomes %2520. Decode that once and you get %20, not a space. The same section is plain about it: "Implementations must not percent-encode or decode the same string more than once." It still happens when a plugin, a link shortener or a spreadsheet encodes a link that was already encoded. The decoder finds it, decodes every layer, and shows the text after one layer as well.
+ or %20?
Both mean a space, in different places. In a query string, a form writes a space as +, and a reader of a form will "Replace any 0x2B (+) in name and value with 0x20 (SP)", as the WHATWG URL Standard puts it. In the page part of a link, before the ?, a + is a real plus sign. The decoder follows that rule. If your + in a query really is a plus sign, choose "A plus sign" and it is kept.
Split first, then decode
A value can hold an encoded & or =. It happens when a whole link is passed inside another one. Decode the lot at once and the & looks like the start of a new tag. RFC 3986 says the parts "must be parsed and separated before the percent-encoded octets within those components can be safely decoded", and the part-by-part list does exactly that. Each tag's value is shown whole, and a link inside a link can be opened in the tool on its own.
FAQ
What does %20 mean in a link?
% followed by the space's byte in hex, 20. In a query string you will also see + for a space. It means the same thing there.Why does my link have %C3%A9 in it?
é. A character outside plain English letters is first turned into its UTF-8 bytes, and each byte is escaped, so é (two bytes) becomes %C3%A9. RFC 3986 says text is "encoded as octets according to the UTF-8 character encoding" first. If you see %E9 on its own instead, the link was made by an old system that used Latin-1. The decoder says so and leaves it as it is.Should I encode a whole link before I use it as a pin's link?
https:// becomes https%3A%2F%2F. Use the whole-link form, which keeps the link working and escapes only what a link cannot hold, like a space. Encode as one value only the parts that go inside a link: a UTM campaign name with a space in it, or a link you pass as a value.Is URL encoding the same as encryption?
% signs hide it.