Link Tools
Percent-encoding reference
The same character does not mean the same thing in a path, a query and a fragment. That is the source of most URL bugs, and it is why this tool decodes each position with different rules.
The one that catches everyone: +
| Position | Input | Decodes to |
|---|---|---|
| Query | a+b | a b |
| Path | a+b | a+b |
In a query string + means a space, because queries inherit
application/x-www-form-urlencoded from HTML forms. In a path it is an
ordinary character. So /a+b/ is a directory literally called
a+b, and rendering it as /a b/ is wrong.
This matters beyond cosmetics: + is a real character in the standard base64
alphabet, and a parser that form-decodes a base64 value destroys it. So when a value could be either,
Inspect shows both readings instead of choosing.
Reserved characters (RFC 3986 §2.2)
These delimit parts of a URL. Encode them when they are data rather than structure.
| Char | Encoded | Structural meaning |
|---|---|---|
| : | %3A | Ends the scheme; separates host from port |
| / | %2F | Path separator. Inside a segment, %2F is a literal slash, not a separator |
| ? | %3F | Starts the query |
| # | %23 | Starts the fragment. Never sent to the server |
| [ ] | %5B %5D | Wrap an IPv6 literal host |
| @ | %40 | Ends userinfo. Everything before it is a username, not the host |
| & | %26 | Separates query pairs |
| = | %3D | Separates a key from its value |
| ; | %3B | A legacy pair separator. Most modern servers no longer accept it |
Unreserved characters
A–Z a–z 0–9 - . _ ~ never need encoding, anywhere.
Encoding them is legal but produces a different-looking URL that means the same thing, which is why
normalising percent-encoding case and decoding unreserved octets are safe operations and dropping a
query parameter is not.
Double encoding
%2520 is %20 encoded again, which is a space
encoded twice. It usually means a URL passed through one system that encoded it and then another that
encoded it again. Inspect peels these one layer at a time and shows each one.
The opposite mistake is just as common: decoding a wrapper parameter twice. A link wrapped by a mail
gateway holds its target encoded once, and a second pass eats the target's own
%20 sequences, producing a different URL.
Malformed escapes
%zz is not valid, and neither is a trailing %2.
Many decoders return an empty string for these, silently turning
?bad=%zz into ?bad=, which looks like a real,
empty value. This tool keeps the raw text and says the escape is broken.