MASK

Free — no sign-up

URL Encoder & Decoder

Percent-encode or decode a URL component without guessing the rules.

Runs entirely in your browser. Nothing you enter is sent to MASK.

What do you want to do?
What are you encoding?

The difference, on the same text

Input
https://mask.pk/go?q=a b&r=1
One value
https%3A%2F%2Fmask.pk%2Fgo%3Fq%3Da%20b%26r%3D1
A whole URL
https://mask.pk/go?q=a%20b&r=1

Runs as you type, in this browser. Up to 200,000 characters.

0 characters

Questions

Which setting do I want?
If you are handling one value — a search term, a redirect target, an email address that is going after ?next= — choose 'One value'. If you are handling a complete link and just want its spaces and accents made safe, choose 'A whole URL'. The worked example on the page shows the same text under both.
Why did my link stop working after I encoded it?
Almost always because a whole URL was encoded with the 'One value' setting, which turns :// into %3A%2F%2F. That is correct when the link is itself a parameter of another link, and wrong when it is the link you want someone to open. Switch to 'A whole URL' and encode again.
Does a + become a space?
No. This tool treats + as a literal plus sign in both directions. Plus-means-space is a rule of HTML form submissions, not of URLs, and applying it here would quietly corrupt values that legitimately contain a plus, such as C++ or a base64 string. If your text came out of a form body, replace + with a space yourself before decoding.
Why does it say my input is not valid percent-encoding?
A % in a URL must be followed by exactly two hex digits, so %20 is valid and %2, %ZZ or a lone % at the end are not. The message names the character position so you can find it. If you meant a literal percent sign, it should be written %25.
Is anything I paste sent to MASK?
No. The encoding runs in your browser with the platform's own URI functions. Nothing is uploaded, logged or stored, and the tool works with the network disconnected.