Skip to content
epitometool

URL encode / decode

Encoders & decoders

Percent-encode and decode URL strings safely.

Updated

Mode

Input

Encoded

  • EnterCopy output
  • KClear input

Quick start

How to URL encode, decode or parse

Pick the right variant for your context, paste the value, copy the result.

  1. Step 1
    Pick a mode and variant

    Encode for a single value, Decode for a percent-encoded string, Parse for a full URL. Variants: component (encodeURIComponent), URI (encodeURI), form (x-www-form-urlencoded).

  2. Step 2
    Paste input

    Drop the value or URL into the left pane. Works with non-Latin scripts and emoji.

  3. Step 3
    Copy what you need

    Hit Copy on the output, or in Parse mode click Copy next to any individual URL part / query parameter.

In-depth guide

URL encoding, decoding, and parsing in your browser

Percent-encoding (a.k.a. URL encoding) is how URLs carry characters that would otherwise have a structural meaning — slashes, ampersands, hashes, spaces — or that aren't part of the URL grammar at all, like accented characters and emoji. This tool encodes, decodes and parses URLs entirely in your browser using the same primitives your JavaScript code uses.

Three variants — and which to pick

  • component — wraps encodeURIComponent. Escapes everything except A-Z a-z 0-9 - _ . ! ~ * ' ( ). Use this when you're encoding a single piece of data that will sit inside a URL (query value, path segment, form field).
  • full URI — wraps encodeURI. Leaves URL-structural characters intact (; , / ? : @ & = + $ #). Use this on an already-assembled URL where you only want to escape stray spaces or unsafe characters.
  • form — like component but also turns spaces into +. This is what HTML forms submit as application/x-www-form-urlencoded.

Encoding bugs that bite

Calling encodeURI on data that will become a query value is a classic mistake — & stays literal, so your value breaks the query structure when concatenated.

Three patterns that cause most of the URL-encoding bugs we see:

  • Double-encoding — encoding an already-encoded string. %20 becomes %2520, which servers happily decode back to %20 instead of a space.
  • Encoding a whole URL with encodeURIComponent — this escapes :, / and ?, breaking the URL grammar. Reserve component-encoding for a single value, not a full URL.
  • Forgetting + in query values — in a query string, + means space, so a literal plus has to become %2B.

Parse mode — quick URL forensics

Parse mode runs the input through the browser's URL constructor and shows every piece: protocol, hostname, port, pathname, search, hash, origin, plus a key/value table of every query parameter (already decoded). Use it for:

  • Inspecting a webhook payload to see exactly what parameters arrived.
  • Auditing a tracking-tagged URL you got in an email.
  • Pulling a single parameter (e.g. state) out of an OAuth callback URL.
  • Checking that a URL is well-formed before pasting it into config.

Privacy

Computed locally. encodeURIComponent, decodeURIComponent and the URL constructor are all browser-native — no library, no network call. Paste an OAuth callback URL with a token in it; it never leaves your machine.

Because nothing is uploaded, this is safe for parsing URLs that contain secrets (session IDs, OAuth tokens, signed download links). Server logs of the host you came from won't see the parsed contents either — the URL string only ever existed in your browser tab.

Frequently asked questions

Which variant should I use — component, URI, or form?

Use 'component' (encodeURIComponent) when you're escaping a single piece of data that will sit inside a URL — like a query-string value, path segment or form field. Use 'full URI' (encodeURI) when you've already assembled a complete URL and only want to escape stray spaces or unsafe chars in pre-built URLs. Use 'form' for x-www-form-urlencoded bodies where spaces become `+` instead of `%20`.

What characters does URL encoding escape?

encodeURIComponent escapes everything except A-Z a-z 0-9 and `- _ . ! ~ * ' ( )`. encodeURI is more lenient and also leaves URL-structural characters alone (`; , / ? : @ & = + $ #`). Form encoding extends encodeURIComponent by also turning spaces into `+`.

Why does + become %2B sometimes but stay as + other times?

In a URL path or fragment, `+` is just a literal character. In a query string (or form body) the historic convention is that `+` means space — so when encoding for a query value you must explicitly escape `+` as `%2B` to avoid ambiguity. Pick the 'form' variant when working with query parameters.

Does this tool support non-Latin scripts and emoji?

Yes. encodeURIComponent / decodeURIComponent operate on UTF-8 byte sequences, so accented Latin, CJK, RTL scripts, combining marks and emoji all round-trip correctly.

What does the Parse mode show?

Parse mode runs the input through the browser's URL constructor and shows protocol, hostname, port, pathname, search, hash, origin, and a key/value table of every query parameter (already URL-decoded). Useful for inspecting webhook payloads, debugging redirects and auditing third-party links.

Is anything sent to a server?

No. encodeURIComponent, decodeURIComponent and the URL constructor are all native browser primitives. The page makes zero network calls during use.

Keep exploring

More tools you'll like

Hand-picked utilities that pair well with the one you're on — all free, client-side, and zero-signup.