Free Developer Utility

URL Encoder / Decoder

Percent-encode and decode URLs, query strings, and components. Includes a query-string parser and common character reference. Live update — nothing leaves your browser.

Plain / Decoded
0 chars
Encoded
0 chars
⚠ Could not decode — invalid percent-encoding

Common Percent-Encoded Characters

Need batch encoding, API access, or custom presets?

Join Early Access for the premium URL Suite — batch encode/decode, REST API, IDN/punycode, OAuth parameter builder, and webhook signer.

✓ You're on the list. We'll be in touch.

About URL Encoding

What is URL encoding (percent-encoding)?
URL encoding converts characters that aren't safe in URLs into a % followed by two hex digits representing the character's UTF-8 byte value. A space becomes %20, an ampersand becomes %26. It's defined by RFC 3986.
encodeURIComponent vs encodeURI — which should I use?
encodeURIComponent is for values inside a URL — query parameter keys/values, path segments you're building dynamically. It encodes everything except unreserved chars (A-Z, a-z, 0-9, -_.!~*'()).

encodeURI is for a complete URL where structure characters like /, ?, #, & must be preserved. Use it only when you have a full URL and want to make it safe for a hyperlink.
Why does + sometimes appear instead of %20?
HTML form encoding (application/x-www-form-urlencoded) uses + as shorthand for a space, while pure percent-encoding (RFC 3986) uses %20. Many server-side frameworks (PHP, Flask, Express) decode both. Enable the "± as space" option in this tool to handle the form-encoding convention.
What is double-encoding and when is it used?
Double-encoding runs encodeURIComponent twice. The % sign itself becomes %25, so %20 becomes %2520. This is needed when you're embedding an already-encoded URL inside another URL parameter — for example, a redirect URL inside an OAuth callback. In most cases, single-encode is correct.
Is this tool safe? Is any data sent anywhere?
100% safe. This tool runs entirely in your browser using standard JavaScript. No data is transmitted to any server. You can verify by going offline — it continues to work perfectly.