각 ASCII 문자의 퍼센트 인코딩 형식, RFC 3986 예약 문자, 개발자를 위한 실용적인 인코딩 규칙.
| Char | Decimal | Hex | URL Encoded | Name |
|---|---|---|---|---|
| 32 | 0x20 | %20 | Space | |
| ! | 33 | 0x21 | 인코딩 불필요 | Exclamation mark |
| " | 34 | 0x22 | %22 | Double quote |
| # | 35 | 0x23 | %23 | Hash / Number sign |
| $ | 36 | 0x24 | %24 | Dollar sign |
| % | 37 | 0x25 | %25 | Percent sign |
| & | 38 | 0x26 | %26 | Ampersand |
| ' | 39 | 0x27 | 인코딩 불필요 | Single quote / Apostrophe |
| ( | 40 | 0x28 | 인코딩 불필요 | Left parenthesis |
| ) | 41 | 0x29 | 인코딩 불필요 | Right parenthesis |
| * | 42 | 0x2A | 인코딩 불필요 | Asterisk |
| + | 43 | 0x2B | %2B | Plus sign |
| , | 44 | 0x2C | %2C | Comma |
| - | 45 | 0x2D | 인코딩 불필요 | Hyphen / Minus |
| . | 46 | 0x2E | 인코딩 불필요 | Period / Dot |
| / | 47 | 0x2F | %2F | Forward slash |
| 0 | 48 | 0x30 | 인코딩 불필요 | Zero |
| 1 | 49 | 0x31 | 인코딩 불필요 | |
| 2 | 50 | 0x32 | 인코딩 불필요 | |
| 3 | 51 | 0x33 | 인코딩 불필요 | |
| 4 | 52 | 0x34 | 인코딩 불필요 | |
| 5 | 53 | 0x35 | 인코딩 불필요 | |
| 6 | 54 | 0x36 | 인코딩 불필요 | |
| 7 | 55 | 0x37 | 인코딩 불필요 | |
| 8 | 56 | 0x38 | 인코딩 불필요 | |
| 9 | 57 | 0x39 | 인코딩 불필요 | Nine |
| : | 58 | 0x3A | %3A | Colon |
| ; | 59 | 0x3B | %3B | Semicolon |
| < | 60 | 0x3C | %3C | Less-than |
| = | 61 | 0x3D | %3D | Equals sign |
| > | 62 | 0x3E | %3E | Greater-than |
| ? | 63 | 0x3F | %3F | Question mark |
| @ | 64 | 0x40 | %40 | At sign |
| A | 65 | 0x41 | 인코딩 불필요 | Capital A |
| B | 66 | 0x42 | 인코딩 불필요 | |
| C | 67 | 0x43 | 인코딩 불필요 | |
| D | 68 | 0x44 | 인코딩 불필요 | |
| E | 69 | 0x45 | 인코딩 불필요 | |
| F | 70 | 0x46 | 인코딩 불필요 | |
| G | 71 | 0x47 | 인코딩 불필요 | |
| H | 72 | 0x48 | 인코딩 불필요 | |
| I | 73 | 0x49 | 인코딩 불필요 | |
| J | 74 | 0x4A | 인코딩 불필요 | |
| K | 75 | 0x4B | 인코딩 불필요 | |
| L | 76 | 0x4C | 인코딩 불필요 | |
| M | 77 | 0x4D | 인코딩 불필요 | |
| N | 78 | 0x4E | 인코딩 불필요 | |
| O | 79 | 0x4F | 인코딩 불필요 | |
| P | 80 | 0x50 | 인코딩 불필요 | |
| Q | 81 | 0x51 | 인코딩 불필요 | |
| R | 82 | 0x52 | 인코딩 불필요 | |
| S | 83 | 0x53 | 인코딩 불필요 | |
| T | 84 | 0x54 | 인코딩 불필요 | |
| U | 85 | 0x55 | 인코딩 불필요 | |
| V | 86 | 0x56 | 인코딩 불필요 | |
| W | 87 | 0x57 | 인코딩 불필요 | |
| X | 88 | 0x58 | 인코딩 불필요 | |
| Y | 89 | 0x59 | 인코딩 불필요 | |
| Z | 90 | 0x5A | 인코딩 불필요 | Capital Z |
| [ | 91 | 0x5B | %5B | Left square bracket |
| \ | 92 | 0x5C | %5C | Backslash |
| ] | 93 | 0x5D | %5D | Right square bracket |
| ^ | 94 | 0x5E | %5E | Caret |
| _ | 95 | 0x5F | 인코딩 불필요 | Underscore |
| ` | 96 | 0x60 | %60 | Backtick / Grave |
| a | 97 | 0x61 | 인코딩 불필요 | Lowercase a |
| b | 98 | 0x62 | 인코딩 불필요 | |
| c | 99 | 0x63 | 인코딩 불필요 | |
| d | 100 | 0x64 | 인코딩 불필요 | |
| e | 101 | 0x65 | 인코딩 불필요 | |
| f | 102 | 0x66 | 인코딩 불필요 | |
| g | 103 | 0x67 | 인코딩 불필요 | |
| h | 104 | 0x68 | 인코딩 불필요 | |
| i | 105 | 0x69 | 인코딩 불필요 | |
| j | 106 | 0x6A | 인코딩 불필요 | |
| k | 107 | 0x6B | 인코딩 불필요 | |
| l | 108 | 0x6C | 인코딩 불필요 | |
| m | 109 | 0x6D | 인코딩 불필요 | |
| n | 110 | 0x6E | 인코딩 불필요 | |
| o | 111 | 0x6F | 인코딩 불필요 | |
| p | 112 | 0x70 | 인코딩 불필요 | |
| q | 113 | 0x71 | 인코딩 불필요 | |
| r | 114 | 0x72 | 인코딩 불필요 | |
| s | 115 | 0x73 | 인코딩 불필요 | |
| t | 116 | 0x74 | 인코딩 불필요 | |
| u | 117 | 0x75 | 인코딩 불필요 | |
| v | 118 | 0x76 | 인코딩 불필요 | |
| w | 119 | 0x77 | 인코딩 불필요 | |
| x | 120 | 0x78 | 인코딩 불필요 | |
| y | 121 | 0x79 | 인코딩 불필요 | |
| z | 122 | 0x7A | 인코딩 불필요 | Lowercase z |
| { | 123 | 0x7B | %7B | Left curly brace |
| | | 124 | 0x7C | %7C | Pipe / Vertical bar |
| } | 125 | 0x7D | %7D | Right curly brace |
| ~ | 126 | 0x7E | 인코딩 불필요 | Tilde |
| Function | Encodes | Leaves alone | Use for |
|---|---|---|---|
| encodeURIComponent() | Everything except A-Z a-z 0-9 - _ . ! ~ * ' ( ) | Alphanumerics + - _ . ! ~ * ' ( ) | Query param values, path segments |
| encodeURI() | Unsafe chars, preserves : / ? # [ ] @ ! $ & ' ( ) * + , ; = | Most URI structural chars | Full URLs |
| escape() ✗ | Non-ASCII + some ASCII (deprecated) | @ * / + | Never — deprecated, use encodeURIComponent |
// Encode a single query param value (most common)
encodeURIComponent('hello world!') // → 'hello%20world!'
encodeURIComponent('price=100&qty=2') // → 'price%3D100%26qty%3D2'
// Build a URL with params safely
const params = new URLSearchParams({ q: 'hello world', page: '2' });
const url = 'https://example.com/search?' + params.toString();
// → https://example.com/search?q=hello+world&page=2
// Decode percent-encoded string
decodeURIComponent('hello%20world') // → 'hello world'
// Python
import urllib.parse
urllib.parse.quote('hello world') # → 'hello%20world'
urllib.parse.quote_plus('hello world') # → 'hello+world'
urllib.parse.urlencode({'q': 'hello world'}) # → 'q=hello+world'URL 인코딩은 안전하지 않은 ASCII 문자를 퍼센트 기호(%)와 바이트 값을 나타내는 두 개의 16진수 숫자로 대체합니다. 예를 들어 공백은 %20 또는 +가 됩니다. 이렇게 하면 모든 시스템과 프로토콜에서 URL이 유효하게 됩니다.
RFC 3986은 어떤 문자가 '비예약'(A-Z, a-z, 0-9, -, _, ., ~)이고 인코딩 없이 안전하게 사용할 수 있는지 정의합니다. 공백, <, >, #, %, {, }, |, \, ^, ` 및 비 ASCII 문자를 포함한 다른 모든 문자는 퍼센트 인코딩해야 합니다.
%20은 공백의 RFC 3986 표준 퍼센트 인코딩이며 URL의 어디서나 작동합니다. 공백에 대한 + 기호는 application/x-www-form-urlencoded 형식(HTML 양식)의 일부이며 경로가 아닌 쿼리 문자열에서만 유효합니다.
개별 쿼리 매개변수 값을 인코딩하려면 encodeURIComponent()를 사용하세요: encodeURIComponent('hello world') → 'hello%20world'. URL 구조를 유지하면서 전체 URL을 인코딩하려면 encodeURI()를 사용하세요. escape()는 사용하지 마세요 — 더 이상 사용되지 않습니다.