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

INPUT
Status: Empty0 chars

Options

direction
encoding

For query strings & form bodies. Encode always follows the mode.

Ready, paste to start
OUTPUT
Output: Empty0 chars
HOW IT WORKS

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.

THE THREE ENCODINGS

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.

ComponentWhole URLForm
space%20%20+
reserved / : ? & =encodedkeptencoded
tilde ~keptkept%7E
use whena query value or path segmentan entire linka 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.

Docs · Encoding

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 query value
a & b = c?

Component encodes the reserved characters so they can't break the URL.

A whole link
https://example.com/path?q=hello world&lang=en

Whole URL keeps the structure and escapes only what's unsafe.

A form body
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

FAQ

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.