URL Encode/Decode
Encode or decode strings for safe use in URLs.
This tool runs entirely in your browser. Your data is never uploaded, never stored, and never leaves your device.
This percent-encodes text so it survives being placed in a URL, and decodes encoded URLs back into something readable — the fix when a query string breaks because a value contained a space, an ampersand or a slash.
How to use it
- 1Choose Encode or Decode.
- 2Paste your text or your encoded URL.
- 3Copy the result.
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. Encoding uses the browser's built-in encodeURIComponent and decodeURIComponent, so behaviour matches exactly what your own code will do.
Last updated August 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 URLs locally using the browser's native encoding functions — no server round-trip, so it's instant and private. The four functions are the browser's own, so what appears here is what the same call would produce inside your code. Nothing inspects the input first: paste a string that is already encoded and every percent sign in it becomes %25, because the function cannot tell an escape from a literal character. Decoding in Full URI mode is deliberately partial — %2F, %3A and the other reserved escapes are left alone, since expanding them would change the structure of the address — so a stubborn %2F there is the mode, not a fault. Round trips are not symmetrical either: decode %7E and re-encode it and the tilde comes back bare, because it never needed escaping. The error line reads the same in both directions, so a failure while encoding still reports a malformed sequence.
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?+
Replace the plus signs with %20 before decoding, or with spaces afterwards. The plus convention belongs to application/x-www-form-urlencoded — the format an HTML form posts, and the one many frameworks use for query strings — and it is not part of percent-encoding proper, so the browser's decoder hands back a literal plus and there is no setting here to change that. The trap runs the other way too: a genuine plus inside a value, in a phone number or a tagged email address, has to travel as %2B, because a form-encoded parser reads a bare one as a space. Component mode escapes it for you; Full URI mode leaves it alone.
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
Related tools
HTML Entity Encode/Decode
Escape or unescape HTML entities in text.
Base64 Encode/Decode
Encode text to Base64 or decode Base64 back to text.
Query String ⇄ JSON
Convert URL query strings to JSON and back.
UUID Generator
Generate one or many random UUID v4 identifiers.