Reading encoded URLs
Links copied from browsers, logs and analytics tools are often full of % sequences: %20 is a space, %2F a slash, %C3%A9 an é. Each %XX is one byte in hexadecimal, and non-ASCII characters take two to four bytes in UTF-8, so an emoji like 👍 appears as %F0%9F%91%8D. Decoding turns them back into the characters you meant.
Form submissions and many search URLs use + for spaces (q=rock+and+roll). Keep Plus as space on for those; turn it off when decoding a path or a value where + is a literal plus, like a phone number +55.
Worked example
The tracking link utm_campaign=Black%20Friday%20%E2%80%93%2050%25%20off decodes to utm_campaign=Black Friday – 50% off. %E2%80%93 is the three UTF-8 bytes of the en dash, and %25 is a literal percent sign.
Common errors
A lone % or a sequence cut in the middle of a multi-byte character (%E2%80 without its last byte) cannot be decoded. The page points to the first bad sequence so you can fix the source.
How this works
The page replaces + with a space when that option is on, then decodes every %XX sequence as a byte and reads the resulting bytes as UTF-8 (JavaScript decodeURIComponent, RFC 3986 §2.1). Characters outside %XX sequences are kept as they are. Invalid sequences stop the decoding and are shown so you can see what is wrong. Switch to Encode for the reverse. Everything runs in this tab.
Frequently asked
What does %20 mean?
It is a space: 0x20 is the ASCII code for space. Other common ones are %2F (/), %3F (?), %26 (&) and %25 (%).
Why is + turned into a space?
HTML forms encode spaces as +. Turn off Plus as space when the + is meant literally.
What if the text is encoded twice?
%2520 decodes to %20 on the first pass. Paste the result again to get the space.
Is my URL sent anywhere?
No. Decoding happens in your browser and nothing is logged.
Sources
- RFC 3986 — Uniform Resource Identifier (URI): Generic Syntax
- ECMA-262 — ECMAScript Language Specification
- Wikipedia — Percent-encoding
Reviewed Oct 17, 2026 · test vectors fixtures/dev/url-decode/