Is the URL decoder free?
Yes. It is completely free to use, with no signup, no account, and no paywall.
Do I need to install anything?
No. It runs in any modern browser on desktop or mobile, with nothing to download and nothing to configure.
Does it stay local?
Yes. The text you paste is processed entirely in your browser and never uploaded to a server.
Why do plus signs stay as plus signs?
Because in a URL a plus sign is a plus sign. The convention that a plus means a space belongs specifically to the application/x-www-form-urlencoded media type, which is what a classic HTML form POST body uses, and it does not apply to URLs generally. This tool reverses percent-encoding faithfully, which means it cannot guess whether your plus signs were spaces or genuine plus characters. If you know the string came from a form body, replace plus with a space first.
Decoding failed on my string. Why?
The most common reason is a percent sign that is not followed by two valid hexadecimal digits, which makes the sequence malformed. This happens with strings that contain a literal percent character (such as a discount code) that was never encoded in the first place. It also happens when a string has been truncated mid-escape, leaving something like %2 at the end. The decoder refuses to guess, so it reports an error rather than returning a plausible but wrong result.
What does %2520 mean?
It is a double-encoded space. A space becomes %20, and if that string gets percent-encoded a second time, the percent sign itself becomes %25, giving %2520. Seeing this is a reliable sign that a URL passed through two layers that each encoded it, which typically happens when a redirect parameter is built by one service and then re-encoded by another. Decode twice to recover the original, then remove the duplicate encoding step in the pipeline.
Is decoding safe for untrusted input?
Decoding itself is safe, but the result is not. Percent-encoding is often what was preventing a hostile value from breaking out of the query string, and once you decode it you may be holding a string full of angle brackets, quotes, or control characters. Escape it again for whatever context it goes into next, whether that is HTML, SQL, or a shell command.
Does anything get uploaded?
No. The decode is one local JavaScript call that runs in your browser. URLs frequently carry session identifiers and signed tokens, so keeping them off the network is the point.