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.

Decode or encode?

Nothing is fetched: the text is read here, in your browser.

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
pinterest
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%20drinks

As 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%20drinks

As 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+drinks

The 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

  1. Paste a link or some text. Nothing is fetched and nothing leaves your browser: the text is only read.
  2. 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.
  3. 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.
  4. 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

CharacterIn a valueIn 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 URLSearchParams produces: 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?
A space. A link cannot hold a space, so it is written as % 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?
That is an é. 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?
Not as one value: that breaks it, because 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?
No. Anyone can decode it. It only makes text safe to carry in a link, so never put a password or a private detail in a link and think the % signs hide it.
Does this tool visit the link?
No. It only reads the text you paste, in your browser. Nothing is fetched, so it is safe to paste a link that is private or not live yet.