What does a URL encoder do?

URL encoding (percent-encoding) rewrites characters that carry special meaning inside an address or a query value, or that fall outside ASCII, as a % sign followed by two hexadecimal digits. Characters that need encoding are turned into UTF-8 bytes, which are then written as %XX, so ç becomes %C3%A7 and İ becomes %C4%B0.

This tool uses the browser's own encodeURIComponent, encodeURI, decodeURIComponent and decodeURI functions. The result appears only in a text box and is never opened as a link, so even a badly formed address is just text conversion.

How to use it

  1. Pick a direction: encode or decode.
  2. Pick a mode: component, full URI or form; a short description appears in the form.
  3. Type or paste text into the input box; the result updates as you type.
  4. Copy the output. Warnings are listed above it; on an error no result is shown and the position is reported.
  5. Use Example to load a sample with accents, or Clear to reset everything.

Three modes: component, full URI and form

The right mode depends on where the encoded piece will sit in an address. The table shows what each mode leaves untouched and how it decodes.

URL encoding modes
ModeLeft as is when encodingBehavior when decoding
Component (encodeURIComponent)Letters, digits and - _ . ! ~ * ' ( )Decodes every %XX sequence; leaves + alone
Full URI (encodeURI)Everything above plus the reserved characters ; / ? : @ & = + $ , #; %, [ and ] are encodedKeeps sequences that stand for those reserved characters (such as %2F and %23) as they are
FormSame as component; the only difference is that a space is written as +Turns + into a space first, then decodes %XX; a literal plus sign is written as %2B

Choose component mode for the value of a query parameter: &, =, ? and / are encoded too, so the value cannot break the address. To fix only accents and spaces in a ready-made address, full URI mode keeps the delimiters. Form mode follows the rule that a space is written as + in application/x-www-form-urlencoded bodies.

Examples

The inputs and outputs below show how the tool behaves. The strings are design examples, not real addresses or user data.

Component, encode:  Crème brûlée      ->  Cr%C3%A8me%20br%C3%BBl%C3%A9e
Form, encode:       a b+c             ->  a+b%2Bc
Component, encode:  a=b&c             ->  a%3Db%26c
Full URI, encode:   https://example.com/café?q=crème brûlée&x=1#top
                    ->  https://example.com/caf%C3%A9?q=cr%C3%A8me%20br%C3%BBl%C3%A9e&x=1#top
Component, decode:  %252F             ->  %2F

The last line shows single-level decoding: %252F becomes %2F in one run, not /. To decode a second level you have to put the output back into the input on purpose; the tool never loops until nothing is left.

Errors and double encoding

The browser functions throw a URIError for invalid input; the tool catches it and shows a localized error with the position. Nothing is silently repaired.

  • A % not followed by two hexadecimal digits (%, %4, %zz) stops decoding and the position is reported.
  • A sequence that is valid percent syntax but meaningless as UTF-8 (a lone %C5, or %FF) is an error.
  • Text with an unpaired surrogate code unit is not valid Unicode and is rejected as input.
  • Encoding text that already contains %XX sequences triggers a warning: % becomes %25, so the text is encoded twice.
  • In component mode, decoding does not turn + into a space; choose form mode for that.

Double encoding most often happens when an address that is already encoded gets encoded again. The tool only warns; you decide which layer is the right one.

Limits, privacy and sources

  • Input can be up to 100 KiB of UTF-8, and the output is separately capped at 256 KiB characters. These are design limits of this tool, not values from a standard.
  • Input is never stored or sent to a server, and text that may contain tokens or passwords is never written to a share link, the address bar or browser storage.
  • A share link carries only the direction and mode you chose.
  • Line breaks and spaces are encoded as they are; the text is neither trimmed nor normalized.
  • The technical details were checked on 25 October 2026 against MDN encodeURIComponent, MDN encodeURI, MDN decodeURI and MDN Malformed URI.

For campaign addresses with query parameters there is the UTM builder, for address fragments the slug generator, and for accented characters in domain names the Punycode converter.

Frequently asked questions

What is the difference between encodeURI and encodeURIComponent?

encodeURIComponent also encodes reserved characters such as ; / ? : @ & = + $ , #, while encodeURI leaves them because they are part of the address structure. Use component mode for parameter values and full URI mode for whole addresses.

Why is a space sometimes %20 and sometimes +?

In most contexts a space is %20. In the application/x-www-form-urlencoded format it is written as +, and a literal plus sign becomes %2B. Form mode applies that rule; the other modes keep + as it is when decoding.

Why does the tool decode only one level?

One run decodes one level: %252F becomes %2F. To decode a second level on purpose, move the output back into the input. An automatic loop would hide which layer is correct.

Why do I get an error for % or %C5?

A % must be followed by two hexadecimal digits, and the decoded bytes must form valid UTF-8. A lone %C5 is half a character, so the browser throws a URIError and the tool reports the position.

Is the address or token I paste sent anywhere?

No. The conversion runs in your browser; the text is not sent, stored or added to a share link. Still, avoid pasting real passwords into any online tool.

Can I click the address in the output?

No. The output is plain text in a text box. To open an address, copy it and paste it yourself; the tool sends no request to any address.

Published: · Updated: