Free developer tools · One value, one clear result

URL Encoder & Decoder

Turn text into percent-encoded UTF-8, or decode it back. Choose URL component or HTML form-value rules so spaces, plus signs and reserved characters behave exactly as you expect.

Spaces encode as %20. A literal + stays + when decoding. Use for one path segment, query value or fragment value.

Limits: 2 MiB UTF-8 input · 12 MiB output · Each action runs exactly once

01 / Source value

0 UTF-8 bytes

Clear the input before loading another example.

Your text is processed on your device. This tool does not upload or save it. Refreshing or switching languages clears it. The site uses Google Analytics for page visits; input and results are not sent as analytics events.

02 / Transformed value

—

Pasting or editing a text box can turn CRLF/CR line endings into LF. Copy and download use the exact generated result; clipboard apps may normalize it. “Use result as input” preserves the raw result until you edit that input.

How to use this encoder and decoder

  1. Paste one text value and choose its encoding convention.
  2. Select Encode once for plain text or Decode once for an encoded value.
  3. Review the result, then copy or download it. To deliberately apply another pass, select Use result as input first.

Why does + sometimes become a space?

In URL component mode, + remains a plus during decoding. In HTML form-value mode, a literal + means a space. In both modes, %20 decodes to a space and %2B to a plus.

a+b%2Bc%20d
Component → a+b+c d
Form value → a b+c d

What is percent encoding?

Percent encoding represents a UTF-8 byte as % plus two hexadecimal digits. For example, 茶 becomes %E8%8C%B6. Encoding is reversible representation, not encryption; it does not keep secrets safe.

Component encoding follows encodeURIComponent: ASCII letters, digits and - _ . ! ~ * ' ( ) remain literal. Form encoding leaves only ASCII letters, digits and * - . _ literal, with spaces written as +.

Can I paste a complete URL?

You can, but this tool treats the entire input as one value. For example, https://example.com/a?q=tea becomes https%3A%2F%2Fexample.com%2Fa%3Fq%3Dtea. URL structure such as :, /, ?, & and = is encoded too.

For a single query parameter, paste only its value. This tool does not parse query fields, shorten links, open input as a URL or determine whether a destination is safe.

Will it double-encode or decode repeatedly?

Each button applies one pass to the input box. Repeating the same action without changing input gives the same result. Encoding %2F produces %252F; decoding %252F produces %2F, not a slash.

The tool never guesses whether your text is already encoded. Use the result as input only when you intentionally need another pass. Results above the 2 MiB input limit can still be copied or downloaded.

Why is my encoded text rejected?

Decoding requires two hexadecimal digits after every % and valid UTF-8 byte sequences. %, %2, %GG and %FF are rejected. Incomplete Unicode characters are rejected in either direction.

Form-value decoding uses strict validation here. Unlike the forgiving parsing behavior of URLSearchParams, malformed escapes and invalid UTF-8 are not silently repaired. Nothing is partially converted.

Are spaces, line breaks and a BOM preserved?

Leading and trailing spaces, tabs, Unicode normalization forms and a U+FEFF byte-order-mark character are never trimmed or removed by conversion. Empty input is valid and produces an empty result.

Browser text boxes can normalize line endings, as described above. A TXT download contains the exact generated UTF-8 bytes. No extra BOM is added; a BOM character already in the result is retained.