%25 in a URL
The percent-encoded percent sign (%).
Short answer
%25 is the percent-encoded percent sign (%). Because % starts every percent-encoded sequence, a literal percent sign in data has to be written %25, as in 100%25. Seeing %25 before two more hex digits usually means double encoding.
- Character
- %
- Percent-encoded
- %25
- Byte value
- 0x25 = 37
- RFC 3986 class
- unsafe
- UTF-8 bytes
- 1
Where you will see it
- Literal percent signs in text: discount=100%25.
- Double-encoded values: %2520 is %20 with its % encoded again.
- Output of every encoding function, which all encode % first.
What goes wrong
- %25 followed by two hex digits (%2520, %253A, %252F) almost always means a value was encoded twice. Decode all layers in the tool to see each pass, then fix the code that encodes an already-encoded value.
- A bare % that is not followed by two hex digits is invalid. decodeURIComponent throws URIError: URI malformed for it. Writing a literal percent sign as %25 avoids the error.
Decoded examples
| Encoded | Decodes to | What it is | Open in the decoder |
|---|---|---|---|
| discount=100%25 | discount=100% | A literal percent sign. | Open in decoder |
| a%2520b | a%20b | Double-encoded space: a%20b after one decode, a b after two. | Open in decoder |
How each language encodes %
Outputs below come from running each function, not from documentation. “Kept” means the function leaves the character as it is. Compare every character across every function.
| Language | Function | Output for % |
|---|---|---|
| JavaScript | encodeURIComponent | %25 |
| JavaScript | encodeURI | %25 |
| JavaScript | URLSearchParams | %25 |
| JavaScript | escape (deprecated) | %25 |
| Python | quote (default safe='/') | %25 |
| Python | quote (safe='') | %25 |
| Python | quote_plus | %25 |
| C# | Uri.EscapeDataString | %25 |
| C# | WebUtility.UrlEncode | %25 |
| C# | HttpUtility.UrlEncode | %25 |
Questions
What does %2520 mean?
It is a space that was percent-encoded twice. The first pass turned the space into %20; the second pass encoded the percent sign as %25. Decode twice to read it.
How do I write a literal percent sign in a URL?
Write it as %25. For example, 100% becomes 100%25. A bare % makes many decoders fail with a URI malformed error.
Decode or encode your own text
Paste anything containing %25. It runs in your browser; nothing is uploaded.
Related characters
%20
space
%20 is the percent-encoded space character.
%3A
colon
%3A is the percent-encoded colon (:).
%2F
forward slash
%2F is the percent-encoded forward slash (/).
All percent-encoded characters · Full percent-encoding table · What is URL encoding?
Behaviour checked against RFC 3986, the WHATWG URL Standard and MDN. Updated November 4, 2026
Tools
URL Encoder
Percent-encode a value, a full URL or form data, with strict RFC 3986 and +/%20 options.
URL Parser
Split a URL into scheme, host, port, path, query and fragment, with checks for common problems.
Query String Parser
Edit query parameters as a table, rebuild the string, or export it as JSON.
Base64 Encode/Decode
Convert text to Base64 and back, including the URL-safe Base64URL alphabet.
HTML Encode/Decode
Escape text to HTML entities and decode entities back to text.
JWT Decoder
Read a JSON Web Token's header and payload and check its expiry.