DevTool Kit

URL Encoder and Decoder

Escape a value so it survives inside a URL, or turn `%E6%97%A5` back into readable text. Paste a whole URL and the tool also splits it into host, path and decoded query parameters.

Three modes, because they are not the same

Component encoding escapes everything reserved and is what you want for a single query value. Full-URI encoding leaves `:/?#[]@` intact so an entire address stays usable. Form encoding matches `application/x-www-form-urlencoded`, where a space becomes `+` rather than `%20` - the shape an HTML form POST sends.

Non-ASCII is encoded as UTF-8

Japanese, accented Latin letters and emoji are converted to their UTF-8 bytes and then percent-escaped, which is what every modern server expects. That is why one Japanese character usually becomes three `%XX` groups.

Inspect a URL, not just escape it

Paste a full address and the tool lists the protocol, host, port, path, fragment and every query parameter with its value already decoded. It is the fastest way to read a long tracking URL or an OAuth redirect and see what is actually being passed.

Frequently asked questions

Is the URL I paste sent anywhere?

No. Nothing you paste leaves your browser. The page loads a small amount of JavaScript, and every calculation happens on your own machine - there is no server to send data to. Redirect URLs and callback links often carry tokens in their query string, so nothing is transmitted.

When should a space be `+` and when `%20`?

Inside a query string sent by an HTML form, `+` is correct and is what form-urlencoded mode produces. Everywhere else - a path segment, a header, a JSON value - `%20` is correct. When in doubt, `%20` is accepted in query strings too.

Why does decoding fail with a "malformed escape" error?

A `%` that is not followed by two hexadecimal digits is invalid. That usually means the string was double-encoded and then partially decoded, or a literal percent sign was never escaped as `%25`. Encoding the value once, cleanly, fixes it.

What is double encoding?

Encoding an already-encoded value, so `%20` becomes `%2520`. It happens when two layers of code both escape the same string. Decode twice to confirm, then remove one of the encoding steps rather than compensating for it downstream.

Related tools

Base64 encodeBase64 decodeHTML entitiesJSON formatterJSON to YAMLYAML to JSONJWT decoderHash generator