Percent-encoding table
Every ASCII character that can need encoding in a URL, with its RFC 3986 class and whether encodeURIComponent, encodeURI and form encoding escape it. Letters A–Z, a–z and digits 0–9 never need encoding.
Unreserved
A–Z a–z 0–9 - . _ ~
Never need encoding.
Reserved: gen-delims
: / ? # [ ] @
Split a URL into its parts.
Reserved: sub-delims
! $ & ' ( ) * + , ; =
Delimit data inside a part.
Everything else
space " % < > \ ^ ` { | }
Must always be encoded.
| Char | Name | Encoded | Dec | RFC 3986 | encodeURIComponent | encodeURI | Form / URLSearchParams |
|---|---|---|---|---|---|---|---|
| NUL | Null | %00 | 0 | control | %00 | %00 | %00 |
| TAB | Horizontal tab | %09 | 9 | control | %09 | %09 | %09 |
| LF | Line feed | %0A | 10 | control | %0A | %0A | %0A |
| CR | Carriage return | %0D | 13 | control | %0D | %0D | %0D |
| SP | Space | %20 | 32 | unsafe | %20 | %20 | + |
| ! | Exclamation mark | %21 | 33 | sub-delim | kept | kept | %21 |
| " | Quotation mark | %22 | 34 | unsafe | %22 | %22 | %22 |
| # | Number sign (hash) | %23 | 35 | gen-delim | %23 | kept | %23 |
| $ | Dollar sign | %24 | 36 | sub-delim | %24 | kept | %24 |
| % | Percent sign | %25 | 37 | unsafe | %25 | %25 | %25 |
| & | Ampersand | %26 | 38 | sub-delim | %26 | kept | %26 |
| ' | Apostrophe | %27 | 39 | sub-delim | kept | kept | %27 |
| ( | Left parenthesis | %28 | 40 | sub-delim | kept | kept | %28 |
| ) | Right parenthesis | %29 | 41 | sub-delim | kept | kept | %29 |
| * | Asterisk | %2A | 42 | sub-delim | kept | kept | kept |
| + | Plus sign | %2B | 43 | sub-delim | %2B | kept | %2B |
| , | Comma | %2C | 44 | sub-delim | %2C | kept | %2C |
| - | Hyphen-minus | %2D | 45 | unreserved | kept | kept | kept |
| . | Full stop | %2E | 46 | unreserved | kept | kept | kept |
| / | Solidus (slash) | %2F | 47 | gen-delim | %2F | kept | %2F |
| : | Colon | %3A | 58 | gen-delim | %3A | kept | %3A |
| ; | Semicolon | %3B | 59 | sub-delim | %3B | kept | %3B |
| < | Less-than sign | %3C | 60 | unsafe | %3C | %3C | %3C |
| = | Equals sign | %3D | 61 | sub-delim | %3D | kept | %3D |
| > | Greater-than sign | %3E | 62 | unsafe | %3E | %3E | %3E |
| ? | Question mark | %3F | 63 | gen-delim | %3F | kept | %3F |
| @ | Commercial at | %40 | 64 | gen-delim | %40 | kept | %40 |
| [ | Left square bracket | %5B | 91 | gen-delim | %5B | %5B | %5B |
| \ | Reverse solidus (backslash) | %5C | 92 | unsafe | %5C | %5C | %5C |
| ] | Right square bracket | %5D | 93 | gen-delim | %5D | %5D | %5D |
| ^ | Circumflex accent | %5E | 94 | unsafe | %5E | %5E | %5E |
| _ | Low line (underscore) | %5F | 95 | unreserved | kept | kept | kept |
| ` | Grave accent (backtick) | %60 | 96 | unsafe | %60 | %60 | %60 |
| { | Left curly bracket | %7B | 123 | unsafe | %7B | %7B | %7B |
| | | Vertical line (pipe) | %7C | 124 | unsafe | %7C | %7C | %7C |
| } | Right curly bracket | %7D | 125 | unsafe | %7D | %7D | %7D |
| ~ | Tilde | %7E | 126 | unreserved | kept | kept | %7E |
Cells show each function's output for that character; “kept” means it is left as-is. Generated from the JavaScript engine's own functions and checked against RFC 3986 §2 and the WHATWG URL Standard. Free to reuse under CC BY 4.0 with a link back.
Non-ASCII characters become several bytes
URLs encode text as UTF-8 first, then percent-encode each byte. One character can therefore become two, three or four %XX groups. Paste any of these into the URL Decoder to see the bytes grouped back into characters.
%C3%A9
Latin small letter e with acute · 2 bytes
%C3%BC
Latin small letter u with diaeresis · 2 bytes
%E2%82%AC
Euro sign · 3 bytes
%E6%97%A5
CJK ideograph (sun, day) · 3 bytes
%E2%9C%93
Check mark · 3 bytes
%F0%9F%98%80
Grinning face emoji · 4 bytes
Sources
Behaviour checked against RFC 3986, the WHATWG URL Standard and MDN. Updated October 3, 2026