URL Encode / Decode

Percent-encode or decode URLs and query components correctly. Choose component-level or full-URL escaping and see the result update as you type — fast, private and entirely client-side.

Runs locally · nothing uploaded
Input

Output
Result will appear here.

About URL encoding

URLs may only contain a limited set of ASCII characters. Everything else — spaces, non-Latin letters, and reserved characters used in the wrong place — has to be percent-encoded: replaced by a % followed by the byte’s two-digit hexadecimal value (a space becomes %20, for example). Getting this right keeps links valid and query parameters intact.

The Component setting maps to encodeURIComponent/decodeURIComponent. It escapes the reserved delimiters ; , / ? : @ & = + $ #, which is exactly what you want when encoding a single query-string value or path segment so those characters can’t be misread as structure. The Full URL setting maps to encodeURI/decodeURI and deliberately leaves those delimiters alone, so a whole URL remains a working URL. Everything runs locally with your browser’s native functions — no upload, no waiting.

Frequently asked questions

What’s the difference between Component and Full URL mode?
Component mode uses encodeURIComponent/decodeURIComponent, which escapes reserved characters like &, ?, =, / and # — use it for a single query value or path segment. Full URL mode uses encodeURI/decodeURI, which preserves those reserved characters so a complete, valid URL stays functional.
Which mode should I use for query string values?
Use Component. A value inside ?q=… must have its & and = escaped, otherwise they’ll be read as separators and break your query. Full URL mode would leave them intact and corrupt the parameter.
Is my input sent anywhere?
No. Encoding and decoding run entirely in your browser with the native encodeURIComponent/encodeURI functions. Nothing is uploaded, logged or stored.
Why did decoding show an error?
Decoding fails on a malformed percent-sequence — for example a lone % or %ZZ that isn’t a valid two-digit hex escape. Fix the stray sequence and the output updates instantly.