Decode percent-encoded URLs, query string parameters, and escape sequences back to clear, readable text instantly with our free online URL decoder. Web links often mask spaces, punctuation, quotes, and non-ASCII characters behind hexadecimal triplets like %20, %3F, or %26. This unescaping tool restores the original characters so you can inspect, debug, and understand your web addresses.
Built for software engineers, security analysts, SEO specialists, and web developers, this utility decodes both standard RFC 3986 percent-encoded characters and HTML form-submitted plus signs (+). If you need to turn raw text into encoded URLs for transmission, use our companion URL Encoder.
All decoding runs 100% locally in your browser. Confidential API credentials, session tokens, authorization codes, and private query parameters remain strictly inside your device and are never sent to external servers or logged in remote systems.
Here is an example of an encoded URL containing percent-encoded delimiters, plus signs representing spaces, and multi-byte UTF-8 sequences, along with the decoded human-readable result.
Input (percent-encoded URL string):
https%3A%2F%2Fexample.com%2Fsearch%3Fquery%3Dhello%2Bworld%26tag%3D%E2%9C%A8Output (decoded text):
https://example.com/search?query=hello world&tag=✨ Notice how %3A resolves to a colon (:), %2F becomes a slash (/), %2B or + resolves to spaces, and the four-byte sequence %E2%9C%A8 renders as the sparkle emoji (✨).
+) should be decoded as spaces or kept as literal plus symbols. % characters) instead of failing with a JavaScript URIError. URL decoding is the inverse of percent-encoding. According to RFC 3986, any character outside the standard unreserved set (A-Z, a-z, 0-9, -, _, ., ~) can be represented by a percent sign followed by two hexadecimal digits denoting the byte value in the UTF-8 character encoding.
When a browser or HTTP server receives a percent-encoded string, it scans for the percent sign (%) and parses the subsequent two characters as a base-16 number between 00 and FF. For standard ASCII characters (values 0x00 to 0x7F), a single byte directly maps to a character. For example, %20 maps to 32 in decimal, which is an ASCII space.
Multi-Byte UTF-8 Sequences: For characters beyond ASCII—such as accented letters (é, ü), symbols (€, ©), and emojis—the character occupies between 2 and 4 bytes in UTF-8. A compliant decoder buffers consecutive percent-encoded bytes until a complete UTF-8 code point is assembled. For example, the character ñ is encoded as two bytes (%C3%B1), while the globe emoji 🌍 requires four bytes (%F0%9F%8C%8D).
Handling Plus Signs vs. Percent 20: A frequent source of confusion is whether the plus character (+) denotes a space. In the path portion of a URL, + is a literal character, and a space must be represented as %20. In contrast, in the query string (the portion following ?), HTML forms adhering to the application/x-www-form-urlencoded specification encode spaces as +. Our URL Decoder provides a toggle so you can control this behavior depending on your data source.
Resilience to Malformed Input: Native browser implementations like decodeURIComponent() are strict: encountering a malformed sequence like %ZZ or a dangling % at the end of a string will throw a fatal URIError. Our decoder wraps native decoding in a resilient parsing strategy, decoding all valid triplets while leaving isolated symbols intact so your work is never interrupted.
+1-555-0100), ensure the Decode + as space toggle is turned off so the plus sign remains intact. %2520 becomes %20). Simply paste the output back into the input field to perform a second decoding pass. & or " after URL decoding, the data contains HTML entities. Use the HTML Entities Decoder to convert them. Check out other developer utilities on BitCompiler designed for fast, client-side web development: