Does it treat plus signs as spaces?
Yes, in the query-oriented modes where that behavior is usually expected. Other modes leave plus signs as-is so the output stays accurate for that context.
What happens with broken percent-encoding?
URL Decoder keeps the invalid segment visible and warns you instead of silently corrupting the output, so you can see exactly where the encoding is broken.
Why are there multiple decoding modes?
Encoded text behaves differently in full URLs, query strings, query values, and path segments. Separate modes keep the decoded output safe and accurate for each context.
Does it upload my URL to a server?
No. URL Decoder runs entirely in your browser. The text you paste is decoded locally on your device and never uploaded.
Is it free?
Yes. URL Decoder is free to use with no account and no upload required.
Why did %2F stay as %2F after decoding?
You were in Full URL mode, which uses decodeURI. That function intentionally leaves escapes for reserved characters (/, ?, #, &, =, +, and others) alone, because decoding them would change the structure of the URL rather than its content. Switch to Query value mode to turn %2F back into a slash.
Why did my plus sign become a space?
In the query-oriented modes, plus signs are converted to %20 before decoding, which is how query strings have encoded spaces since the earliest HTML forms. Path segment mode does not do this, so use it when you are decoding something out of a URL path and the plus is meant to be a literal plus.
What does the warning about invalid encoded characters mean?
It means decodeURIComponent threw on your input, which happens when a percent is followed by something that is not two hex digits, or when the string ends in the middle of an escape sequence. Rather than dropping your text, the tool returns it unchanged and flags it. The usual cause is a URL that was truncated when it was copied.
Can it decode a whole query string with several key=value pairs at once?
Yes. Query string mode splits the input on & and on the first = of each pair, then decodes each key and each value separately. That is why an encoded %3D inside a value stays part of the value instead of being read as a new separator. Decoding the same string in one blob would corrupt exactly those cases.
Is anything uploaded when I decode a URL?
No. The decoding runs in your browser using the standard decodeURI and decodeURIComponent functions. That matters here more than for most tools, because encoded URLs frequently contain session tokens, reset links, and email addresses.
Why is the decoded output so much shorter than what I pasted?
Percent-encoding works on bytes, not characters. A single emoji is four bytes and therefore twelve characters of %XX, and any non-ASCII letter is at least two bytes. Decoding collapses all of that back into one character each.