URL Encoder / Decoder
Percent-encode and decode URLs instantly. Choose component or full-URL mode, toggle form (+) encoding, and keep every character — Korean, emoji, CJK — intact. Nothing leaves your browser.
Query string parameters (decoded)
| Key | Value |
|---|
Type in either box — the other updates instantly. Encoding is UTF-8 safe, so Korean, CJK and emoji round-trip perfectly.
Why text has to be percent-encoded for URLs
A URL can only carry a limited set of characters, and a handful of them — such as ? & = # / — are structural: they mark where the path ends and the query begins, where one parameter stops and the next starts. When you want to put arbitrary text (a search term, a name, a file title) inside a URL, those characters have to be escaped so they are treated as data, not structure. Percent-encoding does this by replacing a character with a % followed by its byte value in hexadecimal, so a space becomes %20. This tool encodes and decodes in both directions as you type.
Reserved, unreserved, and the percent rule
RFC 3986 splits characters into groups. The unreserved set — A–Z a–z 0–9 - _ . ~ — is always safe and never encoded. Everything else may need escaping depending on where it appears. Here is how the common ones come out:
| Character | Encoded | Role in a URL |
|---|---|---|
| space | %20 (or + in a form) | Not allowed literally |
| & | %26 | Separates query parameters |
| = | %3D | Splits a key from its value |
| ? | %3F | Starts the query string |
| # | %23 | Starts the fragment |
| / | %2F | Path separator |
| é (U+00E9) | %C3%A9 | Two UTF-8 bytes |
| 한 (U+D55C) | %ED%95%9C | Three UTF-8 bytes |
Component vs. Full URL — the choice that matters
The mode selector picks between two escaping scopes:
- Component escapes a single piece — one parameter value, one path segment — and also escapes the structural characters
? & = / #, since inside a value they are data. - Full URL escapes an already-assembled address: it fixes spaces and illegal characters but leaves
? & = / #intact so the URL still works.
Example 1 — encoding a value (Component). The text John & Jane becomes John%20%26%20Jane. With Form encoding (space → +) turned on it becomes John+%26+Jane instead — the form style used by HTML form submissions.
Example 2 — non-ASCII round-trips. Encoding runs on UTF-8 bytes, so café bar as a component is caf%C3%A9%20bar, and decoding %ED%95%9C%EA%B8%80 gives back 한글 exactly — no garbled characters.
Example 3 — spotting a wrong scope. If you paste the whole value a=1&b=two words and encode it as Full URL, the & and = survive unescaped and are still read as structure. Encode it as a Component instead and they become a%3D1%26b%3Dtwo%20words — safe to drop into a single parameter.
Space: %20 or + ?
Both are valid but come from different rules. In a generic URL a space is %20. Inside an HTML form submitted as application/x-www-form-urlencoded, a space is written as +. Use the Form-encoding toggle when you are building or reading form-style query strings; leave it off for strict percent-encoding. When decoding, the toggle turns + back into a space.
Common mistakes and limits
- Wrong scope is the top error — encoding a single value with Full URL leaves its
&and=to break the query. - Double-encoding: encoding text that is already encoded turns
%20into%2520. Decode once first if you are unsure. - Not URL escaping for HTML: percent-encoding is not the same as HTML escaping —
<and>in page content need HTML entities, not%3C. - Not security: encoding only reshapes characters so a URL parses; it is neither encryption nor Base64 and hides nothing.
Sources & further reading
- RFC 3986 (IETF) — the URI syntax standard defining reserved characters and percent-encoding
- MDN Web Docs — how encodeURIComponent and encodeURI differ in scope
- WHATWG URL Standard — the parsing and percent-encode set rules browsers actually implement
- Unicode Consortium — UTF-8 byte encoding behind multi-byte percent sequences
Frequently asked questions
What is URL encoding (percent-encoding) and when do I need it?
URL encoding, also called percent-encoding, replaces characters that have a special meaning in a URL — or that aren't allowed at all — with a % followed by their byte value, like a space becoming %20. RFC 3986 reserves characters such as ? & = # / : because they mark the boundaries of a URL. Whenever you put arbitrary text into a query string, path segment or fragment, url encode it first so those reserved characters don't break the link; url decode reverses it.
Component vs Full URL — encodeURIComponent vs encodeURI, which mode should I pick?
Pick Component (encodeURIComponent) when you're encoding a single piece of a URL — one query-parameter value, a path segment or a fragment — because it also escapes the reserved characters ? & = / # that would otherwise be mistaken for structure. Pick Full URL (encodeURI) when you have an already-assembled address and only want to escape spaces and illegal characters while leaving :// ? & = # intact. Choosing the wrong scope is the most common URL-encoding mistake, which is why this url encoder decoder online lets you switch.
Why is a space sometimes %20 and sometimes + ?
Both are valid, but they come from different rules. In a generic URL a space is percent-encoded as %20. Inside an HTML form submitted as application/x-www-form-urlencoded, a space is written as +. Turn on the Form encoding (space → +) toggle when you're building or reading form-style query strings; leave it off for strict RFC 3986 percent encoding. When decoding, the toggle turns + back into a space.
Why do Korean, emoji and other non-ASCII characters encode correctly here?
Because encoding runs on UTF-8 bytes. encodeURIComponent first converts each character to its UTF-8 byte sequence and then percent-encodes those bytes, so Korean (한글), Japanese, Chinese and emoji become valid %XX%XX sequences and decode back to exactly the original text — no mojibake. That makes this a reliable URL 인코더 디코더 for any language, not just ASCII.
Is my text or URL sent to a server?
No. All encoding and decoding happens 100% in your browser with the built-in encodeURIComponent/encodeURI and decodeURIComponent/decodeURI functions — nothing is uploaded and there are no external requests. Only your last text plus your mode and form-encoding choices are saved to this browser's local storage for convenience; clear the box or your site data to remove them.