Toolvore

URL Encode/Decode

Encode or decode URL components, full URLs and form values with correct %20, + and %2B handling.

This tool runs entirely in your browser. Your data is never uploaded, never stored, and never leaves your device.

Encodes or decodes one URL component, a complete URL, or application/x-www-form-urlencoded data without confusing %20, + and a literal %2B.

How to use it

  1. 1Choose Encode or Decode.
  2. 2Choose Component for one value, Full URL to preserve URL structure, or Form when spaces must become plus signs.
  3. 3Paste the input, then copy the result or swap it into the opposite direction for a round-trip check.

Example

Input
a b&c=d
Output
a%20b%26c%3Dd

The space becomes %20, & becomes %26 and = becomes %3D, so they are read as data rather than as URL structure.

What happens to your data

This tool runs entirely in your browser. Your input is never uploaded to a server, never stored, and never logged. Component and full-URL modes use the browser's native codecs; form mode adds the stricter HTML form percent-encode rules and plus-for-space convention.

Last updated September 2026

URL encoding (percent-encoding) makes text safe to place in a URL by replacing reserved and non-ASCII characters with %-escaped equivalents — so spaces, ampersands, slashes, and Unicode survive being passed as query parameters or path segments. This tool encodes and decodes URL components in one click.

It's the quick fix when a query string breaks because a value contained a special character, or when you need to read an encoded URL a system produced.

Which of the two modes you are in matters more than anything else, and what you pasted decides it. If your text is a value — one query parameter, a path segment, a search term, a redirect target — use Component mode, which escapes the delimiters & ? / and # that would otherwise end the value early. If it is a whole address you want to make legal without taking it apart, Full URI mode leaves those characters standing. Paste a complete URL into Component mode and you get one unusable string; paste a value into Full URI mode and an ampersand inside it quietly becomes a second parameter.

Percent-encoding also has a boundary worth knowing. It covers the path, query and fragment, not the host: a domain with non-ASCII characters needs Punycode, and escaping it here produces something no resolver will accept. It is a transport convention rather than a safety measure, so an encoded string is still not escaped for HTML, for a shell or for SQL.

How it works

Toolvore encodes and decodes locally with three explicit rulesets. Component uses encodeURIComponent/decodeURIComponent for one value, Full URL uses encodeURI/decodeURI so structural delimiters remain, and Form applies application/x-www-form-urlencoded rules where a space is + and a literal plus is %2B. Nothing guesses whether an input was already encoded: another encoding pass turns every percent sign into %25. Full URL decoding deliberately leaves reserved escapes such as %2F and %3A intact because expanding them would change the address structure. Decode and encode errors are reported separately, and Swap moves a successful result into the opposite direction for a quick round-trip check.

Common use cases

  • Encoding query parameter values that contain spaces or symbols
  • Decoding encoded URLs from logs, redirects, or referrers
  • Building correct links programmatically
  • Debugging why a request URL is being misinterpreted
  • Escaping a URL that has to travel inside another URL, such as a redirect or callback target
  • Checking whether a value was double-encoded before it reached your application

Frequently asked questions

What is the difference between encodeURI and encodeURIComponent?+

encodeURIComponent escapes more characters and is used for individual query/path values; encodeURI is used for a full URL and leaves structural characters intact.

Is my data sent anywhere?+

No — encoding and decoding run entirely in your browser.

Why do spaces become %20 or +?+

In path/query components spaces become %20; in form-encoded bodies they may become +. Both represent an encoded space.

What happens if a URL gets encoded twice?+

Every percent sign in the input is itself escaped, so %20 becomes %2520 and %2F becomes %252F. The signature is that %25 running through the string; %252520 is three passes. It is the most common way a broken link arrives, usually because one layer was added by a framework or a form and a second by hand. Nothing here detects it — the function is applied to whatever you paste — so the fix is to decode repeatedly until the output stops changing, then encode once from the raw value. If a parameter reaches your server as a literal %20 rather than a space, you are looking at the same fault from the other end.

How do I decode a query string that uses + instead of spaces?+

Choose Form mode. It applies application/x-www-form-urlencoded rules, turning + into a space while preserving a genuine plus only when it arrives as %2B. Component mode treats a bare plus as a literal plus, and Full URL mode preserves it with the rest of the URL structure. Selecting the correct mode avoids doing manual replacements that can corrupt phone numbers or tagged email addresses.

Why does my API signature fail when the URL looks correctly encoded?+

Because the browser's encoder and most signing specifications disagree about five characters. encodeURIComponent leaves ! ' ( ) and * unescaped alongside the unreserved set of letters, digits and - _ . ~ — but canonical signing schemes, AWS Signature Version 4 among them, escape everything outside that unreserved set, demand uppercase hexadecimal digits and insist a space is %20 rather than a plus. The hex case agrees, since the function emits uppercase; those five characters do not. A string that is a valid URL therefore still hashes differently from the one the server rebuilt. If your values can contain them, escape them yourself afterwards — %21 %27 %28 %29 %2A — or let your SDK's own encoder do it.

Does URL encoding hide or protect anything?+

No, and treating it as protection is how secrets end up somewhere nobody intended. Percent-encoding is a published table, reversible by anyone in one paste, and browsers, proxies and log viewers routinely show the decoded form anyway. Whatever sits in a URL is written into server access logs, browser history, the Referer header sent to third-party scripts and usually an analytics pipeline — escaped or not. That is the argument for keeping session tokens, password reset codes and API keys in a header or a request body instead of a query string. Encoding also does nothing for the layers next door: an escaped string still needs HTML escaping before it reaches a page, and parameterisation before it goes near a database.

Why do accented characters come back as gibberish?+

The decoders assume UTF-8, which is what the standard expects and what almost everything emits now. Text escaped on an older system in Latin-1 writes é as %E9 rather than %C3%A9, and %E9 is not valid UTF-8, so decoding fails outright with a malformed sequence instead of showing you the wrong letter. Something that does decode but reads as é is the opposite case: UTF-8 bytes already misread as Latin-1 somewhere upstream, and re-encoding the result will not undo it. Expect the cost on the way in as well — each byte of a non-ASCII character becomes three characters, so an emoji goes in as twelve, and long query strings meet request-line limits sooner than they look like they should.

Why is %2F in a path rejected or turned into a 404?+

Because several servers refuse to decode an encoded slash inside a path segment before routing, on the grounds that it could be used to climb out of a directory. Apache rejects it unless AllowEncodedSlashes is switched on, Tomcat blocks it by default, and a proxy in front of either may normalise it into a real slash, which changes the route entirely. The practical conclusion is that a value containing a slash is safer as a query parameter than as a path segment, however correctly it was escaped. Case is not the issue: %2f and %2F are equivalent and decoders treat them as such, though the standard prefers uppercase and the encoder here emits it.

Used in these workflows