URL Encoder and Decoder

Encode a query value or a whole URL with percent-encoding, or decode %20 and %C5%BE back into readable text. Choose between component mode for single values and full-URL mode that keeps the address readable.

  • Free
  • No upload
  • No sign-up

URL encoder and decoder

Percent-encode text for links and query strings, or decode %20-style text back.

Component encodes every reserved character (/ ? & = #), for a single query value or path part. Full URL keeps the URL structure readable.

Runs entirely in your browser. Your data, files and text are never uploaded.

Component or full URL?

Component mode encodes every character with a special meaning in a URL, including / ? & = and #. Use it for one piece of a URL, such as a search term placed after ?q=, so that an & inside the value cannot split it into two parameters.

Full-URL mode leaves the structure of an address alone and only encodes what is not allowed, such as spaces and non-ASCII letters. "https://example.com/žltý kôň" becomes "https://example.com/%C5%BElt%C3%BD%20k%C3%B4%C5%88", which still works as a link.

Decoding reverses either mode. Form submissions and many query strings write spaces as +, so turn on "Treat + as a space" for them. Malformed sequences such as a lone % or an incomplete UTF-8 byte are pointed out instead of silently producing broken text.

How to use the URL Encoder and Decoder

  1. Choose Encode or Decode, and Component or Full URL.
  2. Type or paste the text or URL into the input; the result updates as you type.
  3. When decoding form data or query strings, switch on "Treat + as a space".
  4. Copy the result, or use it as the new input to encode or decode again.

Frequently asked questions

What is percent-encoding?

A way to write characters that are not allowed in URLs as % followed by two hexadecimal digits for each UTF-8 byte. A space becomes %20 and the letter ž becomes %C5%BE.

Should a space be %20 or +?

Both mean a space in query strings submitted by HTML forms. In paths and in most APIs only %20 is correct, so the encoder always writes %20; the decoder can read + as a space when you ask it to.

Why does decoding show an error?

The input contains a % that is not followed by two hex digits, or bytes that do not form valid UTF-8. The message tells you where the problem is.

Is this the same as encodeURIComponent?

Component mode gives the same result as JavaScript's encodeURIComponent, and Full URL matches encodeURI, so you can check what your code will produce.