URL Encode / Decode
Percent-encode a value, a whole URL, or a form body, and see exactly what changes.
Your data is processed entirely in your browser and is never uploaded.
Tool workspace
Options
For query strings & form bodies. Encode always follows the mode.
×100%
Encode or decode in three steps
Paste a value
Type or paste a URL, query component, or form body that needs transforming.
Pick a mode
Choose Encode or Decode, then match the target: component, whole URL, or form encoding.
Read & copy
Watch the footprint meter, then copy or download the transformed result.
Same string, three different answers
Percent-encoding looks uniform, but the three modes disagree on exactly the characters that cause bugs. Pick the one that matches where the string is going.
| Component | Whole URL | Form | |
|---|---|---|---|
| space | %20 | %20 | + |
reserved / : ? & = | encoded | kept | encoded |
tilde ~ | kept | kept | %7E |
| use when | a query value or path segment | an entire link | a form / x-www-form-urlencoded body |
Non-ASCII always expands to its UTF-8 bytes. é is two (%C3%A9), an emoji is four. The readout reports bytes, not characters, so the expansion number is honest.
Three modes, three answers for the same string
Percent-encoding escapes the characters that aren't safe in a URL, but the exact set depends on where the string is going. Component encodes a single query value or path segment, escaping reserved characters so they can't break the URL. Whole URL leaves the structure (/, :, ?, &, =) intact and only escapes the unsafe characters. Form encoding uses + for spaces and escapes the reserved set. It's what x-www-form-urlencoded bodies use. Non-ASCII always expands to its UTF-8 bytes, and the readout reports bytes, not characters, so the expansion number is honest. A footprint view shows exactly which characters get encoded, one chip at a time.
Things to know
Decode rejects malformed escapes
A % must be followed by two hex digits; a lone or malformed % is an error. Load this in Decode mode and the tool names the problem.
100% sure
Space: %20 or +?
Component and Whole URL write a space as %20. Form encoding (and many real query strings) write it as +. The "decode + as space" toggle reads both back correctly.
a b+c
Non-ASCII expands to bytes
é is two UTF-8 bytes (%C3%A9) and an emoji is four. The byte-based readout makes that expansion visible instead of hiding it as character math.
héllo 😀
Pick the mode that matches the destination
Use Component for a single query value, Whole URL for an entire link, and Form for a form body. The wrong mode either over-escapes (breaking structure) or under-escapes (leaving unsafe characters).
Try these
a & b = c?
Component encodes the reserved characters so they can't break the URL.
https://example.com/path?q=hello world&lang=en
Whole URL keeps the structure and escapes only what's unsafe.
name=Ada Lovelace&role=engineer
Form uses + for spaces and encodes the reserved set.
pair this withBase64 instead → Base64 Encode / Decode·Build a query table → JSON → CSV
Quick answers
Is my input sent anywhere?
No. Encoding and decoding run entirely in your browser. Nothing you paste leaves your machine.
Component vs whole URL: which do I want?
If you're encoding a single value to drop into a query string, use Component. It encodes the reserved characters so they can't break the URL. If you already have a full URL and just want the unsafe characters escaped, use Whole URL, which leaves the structure intact.
Why is there a plus sign instead of %20?
That's form encoding (and many real query strings), where a space is written as +. The "decode + as space" toggle reads it back correctly; turn it off to keep + literal.
What does the footprint show?
Each teal chip is a character that the current mode encodes, shown as its percent-bytes; plain characters pass through untouched. It's the encoding's effect on your exact string, made visible. In decode mode it shows the encoded structure you're unpacking.