Developer tools

URL Encoder
Decoder

Encode URL text or decode percent escapes.

Processed in your browser

Conversion settings

Component mode encodes separators such as /, ? and &. Spaces become %20.

Choose an operation and mode, then convert your text.

Each run converts once. Empty text is valid. URLs are treated as text: this tool never opens or visits them.

Choose the right encoding mode

The same characters have different jobs in a URL and in a single value.

URL component

For a single query value or path segment. Uses encodeURIComponent and decodeURIComponent. Separators are escaped; decoding restores them. Literal + stays + when decoding.

café & tea → caf%C3%A9%20%26%20tea

Whole URI

Uses encodeURI and decodeURI. Keeps URI separators when encoding and preserves their escapes when decoding, so %2F stays %2F. It does not validate a URL or escape & inside an individual query value.

https://example.com/a b?q=tea → https://example.com/a%20b?q=tea

Form value

For one application/x-www-form-urlencoded name or value, not a full query string. Spaces become +; literal + becomes %2B. Decoding changes + to space and strictly decodes UTF-8 escapes.

café + tea → caf%C3%A9+%2B+tea

How it works

  1. Choose operation and mode

    Select encode or decode, then choose one component, a whole URI or one form value.

  2. Enter your text

    Paste into Input text and run the conversion. Nothing is trimmed and there is no fixed text-length limit.

  3. Use the result

    Copy or download a UTF-8 text file. Use as input moves the result back for another run; it does not automatically convert again.

Your text stays in your browser. No uploads or server processing.

Frequently asked questions

Why do + and %20 behave differently?

All modes decode %20 as a space. Only form-value mode also treats a literal + as a space. In component and whole URI modes a literal + remains a plus. Choose the mode that matches the original encoding.

What happens to malformed percent escapes?

Decoding rejects incomplete or non-hexadecimal escapes such as %2 and %ZZ, and invalid UTF-8 such as %FF. It returns no partial result. Unicode text is supported; unpaired surrogate characters are rejected rather than silently replaced.

Does it decode repeatedly or normalize URLs?

No. Decoding %252F once produces %2F, not a slash. Encoding already escaped text escapes its percent signs again. This is a text codec, not a URL parser: it does not canonicalize hosts, convert domains to Punycode, check protocols or test destinations.

Which punctuation stays unescaped?

Component mode leaves letters, digits and - _ . ! ~ * ' ( ) unchanged. Whole URI also leaves ; , / ? : @ & = + $ # unchanged. Form-value encoding leaves only letters, digits and * - . _ unchanged and uses + for spaces.

How are line endings and downloads handled?

Browser text boxes normalize pasted line endings to LF. Decoded carriage returns may also display as LF, but Copy result and the UTF-8 download retain the exact decoded text, without a byte-order mark. Use as input passes through a text box again and normalizes its line endings. Decoding can produce invisible control characters; the output is always plain text.

Is my text saved or sent anywhere?

Processing happens in your browser. The tool never visits supplied URLs, uploads or logs text, or writes it to browser storage. Copy writes to your clipboard; Download saves a file when you choose. Reset clears both boxes and releases the download.

Can I cancel or change the input?

Cancel stops processing and keeps your input. Editing text or changing a setting clears the old result and cancels pending work. Large text is limited by browser memory; processing failures show an error and you can retry. Clipboard access may require browser permission; the result remains selectable.