Productivity and Utilities

URL Encoder and Decoder

Encode text for a URL or decode a percent-encoded link, with component or full URL rules and a table of query values.

Which characters to encode

Text is converted to UTF-8 bytes before each byte is written as a percent sign and two hexadecimal digits. Everything runs in your browser and nothing is uploaded.

Next step

How to use the url encoder and decoder

  1. Choose Encode or Decode, then paste your text into the first box. The result appears as you type.
  2. Pick the rule set. Component is for one value, such as a search term or a path piece. Full URL is for a whole address that should keep its slashes, question mark and ampersands.
  3. Turn on the plus sign option if you are working with form data, where a space is written as + instead of %20.
  4. Press Copy result, or Use the result as input to run it back through the other direction. When you decode a URL or a query, the table lists each key and value.

What stays and what is escaped

Percent encoding writes a character as a percent sign and two hexadecimal digits for each byte of its UTF-8 form, so é becomes %C3%A9 and a space becomes %20. RFC 3986 calls A to Z, a to z, 0 to 9 and - . _ ~ the unreserved characters, and the characters : / ? # [ ] @ ! $ & ' ( ) * + , ; = reserved.

The two JavaScript rules differ. Component (encodeURIComponent) leaves only A to Z, a to z, 0 to 9 and - _ . ! ~ * ' ( ) unescaped, so it escapes the separators / ? : @ & = + $ , ; and #. Full URL (encodeURI) leaves those same characters and also ; , / ? : @ & = + $ # unescaped, but it still escapes the brackets [ and ] and the percent sign itself.

Use component rules on each value before you put it in a URL. Using full URL rules on a value that contains an ampersand or an equals sign leaves them in place, which can split your value into two parameters.

Plus signs and spaces

In the query part of a URL submitted from an HTML form, a space is written as a plus sign, and a real plus sign is written %2B. In a path, a plus sign is just a plus sign. That is why the plus option is separate. For encoding with full URL rules the option changes spaces only after the first question mark and before any hash, and when decoding it reads plus signs the same way.

The form style here still leaves ! ~ * ' ( ) alone, as the JavaScript functions do, so it can differ from a strict form encoder on those characters.

Decoding errors and the query table

A percent sign must be followed by two hexadecimal digits. The tool points to the first bad sequence by position instead of failing silently, so "100% sure" is reported at position 4. A sequence like %E2%28%A1 is well formed but is not valid UTF-8, and the tool says so.

Full URL decoding keeps escaped reserved characters, so %2F stays %2F and the structure of the address survives. Component decoding turns everything back into text. If your text is a URL with a query, or a string like a=1&b=2, the table splits it at the ampersands and decodes each key and value. A long list is limited to 200 rows. For tracking parameters see the UTM link builder, and to turn a title into a path piece see the slug generator.

Assumptions and limits

  • Text is converted to UTF-8 before encoding, and decoded bytes must be valid UTF-8.
  • Input is limited to 500,000 characters and the query table to 200 pairs.
  • The tool does not fetch, open or check any link. It only changes text.
  • Characters outside the Basic Multilingual Plane, such as emoji, are encoded as four UTF-8 bytes. A lone surrogate half cannot be encoded and is reported.

Formulas reviewed October 10, 2026. See the calculation methodology for how SumPanda rounds, tests and sources its formulas.

Frequently asked questions

Should I use component or full URL encoding?

Use component for a single value that you will place inside a URL, because it escapes the separators. Use full URL only on a complete address whose slashes, question mark and equals signs must stay as they are.

Why does my decoded text still show %2F?

Full URL decoding deliberately keeps escaped reserved characters so the address keeps its meaning. Switch to component rules if you want every escape turned back into its character.

What is the difference between %20 and +?

Both can mean a space, but only in different places. %20 works everywhere in a URL. A plus sign means a space only in form data in the query string, which is why the tool makes it an option.

Why do I get a malformed sequence error?

A percent sign was not followed by two hexadecimal digits, as in 100% or %zz. If your text has a literal percent sign, encode it first so it becomes %25.