URL Decoder
Paste percent-encoded text, choose how raw plus signs behave, and decode exactly once without opening a URL.
One strict pass: decode UTF-8 percent escapes as text. This tool does not open, follow, or validate a URL.
Current decoded text
Decoded result
- Interpretation
- Passes
Output is shown as text only. Inspect decoded delimiters before using the result elsewhere.
Private decoding: input and result stay in this tab. They are not added to the URL, history, storage, cookies, requests, analytics, errors, or console. Analytics receives fixed tool and action identifiers only.
URL component plus versus form-data plus
Percent encoding writes bytes as % followed by two hexadecimal digits. This decoder supports two explicit interpretations for a raw +. URL component keeps it as +; Form data changes it to a space before decoding, following the form URL-encoded convention. An encoded %2B becomes a literal plus in either mode.
| Input | Interpretation | One-pass output |
|---|---|---|
name=Tool+Neko¬e=red%2Bblue | URL component | name=Tool+Neko¬e=red+blue |
name=Tool+Neko¬e=red%2Bblue | Form data | name=Tool Neko¬e=red+blue |
Strict UTF-8 errors and one pass
The tool requires every percent sign to start a complete two-digit hexadecimal escape. It also rejects invalid, overlong, truncated, surrogate, or out-of-range UTF-8 byte sequences. A failure returns no partial result. This strict behavior follows the failure boundary documented for decodeURIComponent(); the more general URL Standard percent-decoding algorithm can retain malformed percent text instead.
Each submission performs one pass from the unchanged input. For example, %252Fadmin%253Fx%253D1 becomes %2Fadmin%3Fx%3D1, not /admin?x=1. Decoded delimiters may change how text would be understood elsewhere, so the result remains inert text and is never opened or rendered as markup.
Scope and limits
Raw input is limited to 100,000 UTF-16 code units. Unescaped Unicode, line breaks, and whitespace remain unchanged. This page decodes URL percent escapes only; it does not encode, recursively decode, parse query fields, validate URLs, follow redirects, expand short links, decode Base64 or Punycode, unwrap vendor Safe Links, extract QR codes, save results, or provide accounts.
Frequently asked questions
Does this URL decoder upload or save my text?
No. Decoding and copying run in this browser tab. Input, output, error positions, lengths, and plus interpretation are not put in the URL, storage, cookies, requests, analytics, errors, or console.
Does a plus sign become a space?
You choose. URL component mode keeps a raw + unchanged. Form data mode changes a raw + to a space before percent decoding. In both modes, %2B becomes a literal plus.
What happens with malformed percent encoding?
The tool rejects the first percent sign not followed by two hexadecimal digits and rejects invalid UTF-8. It returns no partial or stale result.
Does Decode run more than once?
No. Each Decode action performs exactly one pass against the unchanged input. A result such as %2F remains that way; the tool never recursively decodes it.
Is URL decoding the same as decryption or opening a link?
No. This tool changes percent-encoded text only. It does not decrypt, validate, parse, open, follow, or judge the safety of a URL.
How much text can I decode?
The raw input accepts at most 100,000 UTF-16 code units. This fixed limit keeps the browser-only operation bounded.