Why URLs are full of %20 — and how to speak it fluently
URLs permit a startlingly small set of characters, and everything else — spaces, quotes, ampersands, every non-English letter — must travel as percent-encoding: a % followed by the character's byte value in hex. Space becomes %20, ş becomes %C5%9F, and a search query like fish & chips must become fish%20%26%20chips or the & silently splits your parameter in half. This tool encodes and decodes both directions, with the one distinction that prevents 90% of URL bugs: component mode versus full-URL mode.
How to encode or decode
- Paste your text or URL fragment.
- Choose the mode — Component for values going into a URL, Full URL for a complete address.
- Click Encode or Decode; copy the result.
Component vs full URL: the distinction that matters
Component mode encodes aggressively — including /, ?, &, = and : — because when text is a parameter value, those characters are data, not structure: an unencoded & inside a value terminates it and spawns a phantom parameter. Use it for query values, path segments, anything user-supplied. Full URL mode encodes gently, preserving the structural characters so a complete address keeps working — use it to clean a whole URL that contains spaces or non-ASCII letters. The classic bug is using the gentle mode on a value: search for “profit & loss”, watch “loss” vanish into a phantom parameter. When unsure, you almost always want Component.
Decoding: reading the matrix
Decode mode turns %xx soup back into human text — indispensable for reading analytics exports, log files, referrer URLs and links copied from address bars (browsers display pretty URLs but copy encoded ones). The decoder also converts + to space, honouring the legacy form-encoding convention still used in query strings everywhere. Malformed sequences (a stray % not followed by valid hex) produce a clear error instead of silent corruption.
Daily encounters
- Building links by hand: mailto subjects, WhatsApp share texts, pre-filled form URLs — every value needs component encoding.
- UTM hygiene: campaign names with spaces must be encoded (or better, avoided — our UTM Builder handles this automatically).
- Debugging webhooks/APIs: decode the query string to see what was actually sent.
- De-uglifying shared links: decode, read, trim the junk, re-encode.
Encode before sending, decode before reading — with the right mode, URLs stop eating your data.
Quick reference
| Property | Detail |
|---|---|
| Modes | Component (aggressive) / full URL (structure-safe) |
| Encoding | UTF-8 percent-encoding (%20, %C5%9F…) |
| Decode extras | + treated as space (form convention) |
| Errors | Malformed %-sequences reported clearly |
| Rule of thumb | Values → Component; whole addresses → Full URL |
| Classic bug prevented | Unencoded & splitting parameter values |
| Processing | 100% in-browser |
Frequently asked questions
When do I use Component vs Full URL mode?
Component for any text going into a URL as a value — query parameters, path pieces, user input. Full URL only when encoding a complete address whose / ? & = structure must keep functioning. Unsure? Component is correct far more often.
Why did part of my parameter disappear after the & sign?
The & wasn't encoded, so the URL parser read it as “next parameter starts here”. Encode the value in Component mode — & becomes %26 and travels as data instead of structure.
What's the difference between %20 and + for spaces?
Both mean space: %20 is the universal percent-encoding; + is a legacy convention valid only in query strings. This tool encodes to %20 (always safe) and decodes both.
How do non-English characters get encoded?
As their UTF-8 bytes, each percent-encoded — ş becomes %C5%9F (two bytes). It looks verbose but decodes perfectly everywhere; that's the standard the whole modern web agreed on.