How to use
- Paste or type text into the input box.
- Select Encode to percent-encode it, or Decode to turn percent-encoded text back into plain text.
- If decoding fails, fix the reported escape and decode again.
- Use Copy output to copy the result.
What gets encoded
Encoding follows the browser's encodeURIComponent: text is converted to UTF-8 and every character except A–Z, a–z, 0–9 and - _ . ! ~ * ' ( ) is written as %XX escapes. Spaces become %20, and characters with special meaning in URLs, such as / ? & = # and +, are escaped so the result is safe to use as a single query parameter value or path segment.
This encodes a URL component, not a whole URL: encoding https://example.com/a?b=c escapes the :, / and ? as well. Encoding already-encoded text encodes the % signs again (%20 becomes %2520).
How decoding works
Decoding follows the browser's decodeURIComponent and is strict. A % that is not followed by two hexadecimal digits, or escapes whose bytes are not valid UTF-8, are reported as errors instead of being passed through unchanged.
A + sign is decoded as a literal +, not as a space. Treating + as a space is a rule of HTML form encoding (application/x-www-form-urlencoded), not of URL percent-encoding.
Limits
Input is limited to 5,000,000 characters. Encoding can make text up to nine times longer, so encoded output is limited to 20,000,000 characters.
FAQ
- Is my text uploaded?
- No. Encoding and decoding run entirely in your browser. Your text is not sent to a server, not stored, and not added to the page URL.
- Why is my space encoded as %20 and not +?
- %20 is the percent-encoding of a space and is valid everywhere in a URL. + only means a space inside HTML form data, so %20 is the safer choice.
- Why does decoding fail on my input?
- Either a % is not followed by two hexadecimal digits (encode a literal % as %25), or the escapes describe bytes that are not valid UTF-8 text.