URL Encoder & Decoder
Percent-encode or decode one URL component or form value. Your text stays on your device and is never opened or fetched.
Choose a mode, add a value, then press Encode or Decode.
How to encode and decode a URL value
Choose a mode
URL component for a query value or path segment. Form value for one value of form data.
Add one value
Type, paste or import it. The whole input is processed as one value, exactly as written.
Press Encode or Decode
Check the output, then copy it, download it, or use it as the next input.
The two modes
- URL component. Works like JavaScript’s encodeURIComponent and decodeURIComponent. A space becomes %20 and a plus becomes %2B. When decoding, + stays a plus sign. Example: a b+c becomes a%20b%2Bc.
- Form value. Follows application/x-www-form-urlencoded, as HTML forms send it, using the browser’s URLSearchParams. A space becomes + and a plus becomes %2B. When decoding, + becomes a space. Example: a b+c becomes a+b%2Bc. It handles one value, not a whole query string, so a literal & is refused when decoding.
- Why there is no “encode a whole URL” option. Encoding a complete URL as a component also encodes its structure: https://example.com/a?b=c becomes https%3A%2F%2Fexample.com%2Fa%3Fb%3Dc, which no longer works as a link. Encode each value on its own, then join the parts.
- Reserved characters. & = / ? # and : are always encoded (as %26, %3D, %2F, %3F, %23, %3A), so a value cannot break out of its place in a URL. Decoding turns them back.
What to expect
- Unicode. Accents, emoji and other scripts are turned into UTF-8 bytes, then each byte is written as %XX. Decoding reads the bytes back as UTF-8.
- One pass per press. Existing % signs are encoded again (%20 becomes %2520). If a value was encoded twice, press Decode a second time; the tool never repeats decoding by itself.
- Malformed input is refused. A % without two hex digits, escapes that are not valid UTF-8, and lone surrogate characters are reported with their position. Nothing is repaired or replaced silently.
- Nothing is changed behind your back. Spaces and line breaks at either end are kept, lines are not split, and nothing is converted while you type. Empty input gives an empty output and says so. If an action fails, the earlier output stays and is labelled out of date.
Limits
- 1 MB
Larger input is refused with a message rather than cut. The work runs in a background thread (a Web Worker) so the page stays responsive. Text boxes store line breaks as LF, so a line break you type is encoded as %0A.
What happens to your data
Everything runs in your browser. Your text is not uploaded and is not sent to any server. It is shown as plain text only: the tool never opens, fetches or runs it, and decoding does not check that a link is valid or safe. Nothing is saved in the browser or put in the page address. See Privacy.
Not included
- Editing query strings key by key
- Shortening links or checking redirects
- Processing files in batches
- Encoding a complete URL in one step
Frequently asked questions
Should + be a space or a plus?
It depends where the text came from. In form data (including many query strings) + means a space. In a URL component it is a plain plus sign. Pick the mode that matches.
Why does my text contain %2520?
It was encoded twice: %20 had its % encoded as %25. Press Decode once for %20, and again for a space.
Is my text uploaded?
No. It is processed in your browser. The site only delivers the page and its code.
Is URL encoding a kind of encryption?
No. Anyone can decode it. It only makes characters safe to place in a URL.
Do I need an account?
No. The tool is free and needs no sign-in.