100% on-device · nothing uploaded
URL encoder & decoder
Turn text into safe percent-encoded form for URLs, or decode a %-riddled link back into something you can read. Both directions, both modes, all in your browser.
How to use it
- Paste the text or URL, then choose Encode or Decode.
- Use Component mode for a single query value, and Full URL mode when you are encoding a whole address.
- Copy the result.
Reserved, unreserved, and why the two modes exist
RFC 3986 sorts characters into three groups. The unreserved set — letters, digits, hyphen, full stop, underscore and tilde — never needs escaping and should not be escaped, since %41 and A are defined as equivalent and a server may or may not normalise before matching a route. The reserved set is the delimiters that give a URL its structure: escaped, a slash is data; unescaped, it is syntax.
JavaScript’s two functions split along that seam. encodeURIComponent escapes the reserved set, so an ampersand inside a value cannot start a new parameter. encodeURI leaves it intact, which is right for a whole address and wrong for any fragment of one. Both were specified against the older RFC 2396 and leave apostrophe, brackets, exclamation mark and asterisk unescaped — a deviation that OAuth 1.0 signature base strings, which require them encoded, do notice.
Double encoding, and the bugs that live in the second decode
The classic failure is encoding a value twice. The percent sign itself requires escaping, so %20 encoded again becomes %2520, and what arrives is the literal text %20 rather than a space. It happens whenever a form library escapes a value and hand-built concatenation escapes it again. The symptom is a query string that looks nearly right, with a doubled percent run wherever a space or slash used to be.
It is also a security pattern with a catalogue entry. Where a filter decodes once and inspects while the application decodes again before use, %252e%252e%252f passes inspection as inert text and arrives as ../ — CWE-174, double decoding of the same data. Decoding here is a single pass on purpose: percent sequences left in the output mean the input really was encoded twice.
Questions
What is the difference between component and full-URL mode?
Component mode escapes everything unsafe, including / ? & and =, which is right for one query value. Full-URL mode leaves the characters that give a URL its structure intact.
Why do spaces become %20?
A raw space is not legal in a URL, so it is percent-encoded. Some systems use + instead inside query strings; both are decoded back to a space.
Is my URL sent anywhere?
No. The encoding uses the browser's built-in functions and never leaves the tab.
Updated 2026-07-20. Runs fully in your browser — nothing is uploaded.