Таблица кодирования символов в URL
15.10.2019
39546
В закладкиВ URL некоторые символы должны кодироваться, в PHP для этого применяется функция urlencode()
. По её алгоритму все символы, кроме латинских букв, -
, _
, .
заменяются знаком процента (%
), за которым идут два шестнадцатеричных числа (поэтому результат зависит от кодировки), пробелы заменяются на знак сложения (+
).
Так же есть функция rawurlencode()
, которая выполняет туже роль, но с минимальным различием – символ ~
остается без изменяя.
Таблица URL-кодирования:
Символ | UTF-8 | ANSI |
---|---|---|
~ | %7E | %7E |
` | 60% | 60% |
‘ | 27% | 27% |
« | 22% | |
@ | 40% | 40% |
? | %3F | %3F |
! | 21% | 21% |
# | 23% | 23% |
№ | %E2%84%96 | %B9 |
$ | 24% | 24% |
% | 25% | 25% |
^ | %5E | %5E |
& | 26% | 26% |
+ | %2B | %2B |
* | %2A | %2A |
: | %3A | %3A |
, | %2C | %2C |
( | 28% | 28% |
) | 29% | 29% |
{ | %7B | %7B |
} | %7D | %7D |
[ | %5B | %5B |
] | %5D | %5D |
< | %3C | %3C |
> | %3E | %3E |
/ | %2F | %2F |
%5C | %5C | |
А | %D0%90 | %C0 |
а | %D0%B0 | %E0 |
Б | %D0%91 | %C1 |
б | %D0%B1 | %E1 |
В | %D0%92 | %C2 |
в | %D0%B2 | %E2 |
Г | %D0%93 | %C3 |
г | %D0%B3 | %E3 |
Д | %D0%94 | %C4 |
д | %D0%B4 | %E4 |
Е | %D0%95 | %C5 |
е | %D0%B5 | %E5 |
Ё | %D0%81 | %A8 |
ё | %D1%91 | %B8 |
Ж | %D0%96 | %C6 |
ж | %D0%B6 | %E6 |
З | %D0%97 | %C7 |
з | %D0%B7 | %E7 |
И | %D0%98 | %C8 |
и | %D0%B8 | %E8 |
Й | %D0%99 | %C9 |
й | %D0%B9 | %E9 |
К | %D0%9A | %CA |
к | %D0%BA | %EA |
Л | %D0%9B | %CB |
л | %D0%BB | %EB |
М | %D0%9C | %CC |
м | %D0%BC | %EC |
Н | %D0%9D | %CD |
н | %D0%BD | %ED |
О | %D0%9E | %CE |
о | %D0%BE | %EE |
%D0%9F | %CF | |
п | %D0%BF | %EF |
Р | %D0%A0 | %D0 |
р | %D1%80 | %F0 |
С | %D0%A1 | %D1 |
с | %D1%81 | %F1 |
Т | %D0%A2 | %D2 |
т | %D1%82 | %F2 |
У | %D0%A3 | %D3 |
у | %D1%83 | %F3 |
Ф | %D0%A4 | %D4 |
ф | %D1%84 | %F4 |
Х | %D0%A5 | %D5 |
х | %D1%85 | %F5 |
Ц | %D0%A6 | %D6 |
ц | %D1%86 | %F6 |
Ч | %D0%A7 | %D7 |
ч | %D1%87 | %F7 |
Ш | %D0%A8 | %D8 |
ш | %D1%88 | %F8 |
Щ | %D0%A9 | %D9 |
щ | %D1%89 | %F9 |
Ъ | %D0%AA | %DA |
ъ | %D1%8A | %FA |
Ы | %D0%AB | %DB |
ы | %D1%8B | %FB |
Ь | %D0%AC | %DC |
ь | %D1%8C | %FC |
Э | %D0%AD | %DD |
э | %D1%8D | %FD |
Ю | %D0%AE | %DE |
ю | %D1%8E | %FE |
Я | %D0%AF | %DF |
я | %D1%8F | %FF |
15. 10.2019, обновлено 18.10.2019
39546
#HTTP #PHP #URL #Домены
В закладкиДругие публикации
Таблица символов KOI8-R
KOI8-R (КОИ8-R) представляет собой восьмибитовую кодовую страницу для кодирования букв кириллических алфавитов, совместима с кодировкой ASCII.
HTML — кодировка URL — CoderLessons.com
Управляющие символы ASCII – непечатаемые символы, обычно используемые для управления выводом. Диапазон символов 00-1F шестнадцатеричный (0-31 десятичный) и 7F (127 десятичный). Полная таблица кодирования приведена ниже.
Не-ASCII управляющие символы – это символы за пределами набора символов ASCII из 128 символов.
Зарезервированные символы – это специальные символы, такие как знак доллара, амперсанд, плюс, общий, косая черта, двоеточие, точка с запятой, знак равенства, знак вопроса и символ «at». Все они могут иметь разные значения внутри URL, поэтому их необходимо кодировать. Полная таблица кодирования приведена ниже.
Небезопасные символы – это пробел, кавычки, меньше символа, больше символа, символ фунта, символ процента, левая фигурная скобка, правая фигурная скобка, труба, обратная косая черта, каретка, тильда, левая квадратная скобка, правая квадратная скобка, могильный акцент , Эти символы дают возможность быть неправильно понятыми в URL-адресах по разным причинам. Эти символы также всегда должны быть закодированы. Полная таблица кодирования приведена ниже.
Управляющие символы ASCII – непечатаемые символы, обычно используемые для управления выводом. Диапазон символов 00-1F шестнадцатеричный (0-31 десятичный) и 7F (127 десятичный). Полная таблица кодирования приведена ниже.
Не-ASCII управляющие символы
Зарезервированные символы – это специальные символы, такие как знак доллара, амперсанд, плюс, общий, косая черта, двоеточие, точка с запятой, знак равенства, знак вопроса и символ «at». Все они могут иметь разные значения внутри URL, поэтому их необходимо кодировать. Полная таблица кодирования приведена ниже.
Небезопасные символы – это пробел, кавычки, меньше символа, больше символа, символ фунта, символ процента, левая фигурная скобка, правая фигурная скобка, труба, обратная косая черта, каретка, тильда, левая квадратная скобка, правая квадратная скобка, могильный акцент , Эти символы дают возможность быть неправильно понятыми в URL-адресах по разным причинам.
Нотация кодирования заменяет нужный символ тремя символами: знаком процента и двумя шестнадцатеричными цифрами, которые соответствуют позиции символа в наборе символов ASCII.
пример
Одним из наиболее распространенных специальных символов является пробел. Вы не можете ввести пробел в URL напрямую. Позиция пробела в наборе символов составляет 20 шестнадцатеричных. Таким образом, вы можете использовать% 20 вместо пробела при передаче вашего запроса на сервер.
http://www.example.com/new%20pricing.htm
Этот URL-адрес фактически извлекает документ с именем «new pricing.htm» с сайта www.example.com.
Кодировка управляющих символов ASCII
Это включает в себя кодирование для диапазонов символов 00-1F шестнадцатеричное (0-31 десятичное) и 7F (127 десятичное)
Десятичный | Шестнадцатеричное значение | символ | Кодирование URL |
---|---|---|---|
0 | 00 | % 00 | |
1 | 01 | % 01 | |
2 | 02 | % 02 | |
3 | 03 | % 03 | |
4 | 04 | % 04 | |
5 | 05 | % 05 | |
6 | 06 | % 06 | |
7 | 07 | % 07 | |
8 | 08 | возврат на одну позицию | % 08 |
9 | 09 | табуляция | % 09 |
10 | 0a | перевод строки | % 0a |
11 | 0b | % 0b | |
12 | 0с | % 0с | |
13 | 0d | возврат каретки | % 0D |
14 | 0e | % 0e | |
15 | 0f | % 0f | |
16 | 10 | % 10 | |
17 | 11 | % 11 | |
18 | 12 | % 12 | |
19 | 13 | % 13 | |
20 | 14 | % 14 | |
21 | 15 | % 15 | |
22 | 16 | % 16 | |
23 | 17 | % 17 | |
24 | 18 | % 18 | |
25 | 19 | % 19 | |
26 | 1a | % 1а | |
27 | 1б | % 1b | |
28 | 1c | % 1c | |
29 | 1d | % 1d | |
30 | 1e | % 1е | |
31 | 1f | % 1f | |
127 | 7е | % 7е |
Кодировка управляющих символов не ASCII
Это включает в себя кодирование для всей “верхней половины” ISO-Latin набора 80-FF hex (128255 десятичное. )
Десятичный | Шестнадцатеричное значение | символ | Кодирование URL |
---|---|---|---|
128 | 80 | € | % 80 |
129 | 81 | % 81 | |
130 | 82 | , | % 82 |
131 | 83 | ƒ | % 83 |
132 | 84 | « | % 84 |
133 | 85 | … | % 85 |
134 | 86 | † | % 86 |
135 | 87 | ‡ | % 87 |
136 | 88 | % 88 | |
137 | 89 | ‰ | % 89 |
138 | 8а | Š | % 8а |
139 | 8б | < | % 8b |
140 | 8в | О. Н | % 8c |
141 | 8d | % 8d | |
142 | 8е | Ž | % 8e |
143 | 8е | % 8е | |
144 | 90 | % 90 | |
145 | 91 | ‘ | % 91 |
146 | 92 | ‘ | % 92 |
147 | 93 | « | % 93 |
148 | 94 | » | % 94 |
149 | 95 | • | % 95 |
150 | 96 | – | % 96 |
151 | 97 | – | % 97 |
152 | 98 | ~ | % 98 |
153 | 99 | ™ | % 99 |
154 | 9а | š | % 9a |
155 | 9b | > | % 9b |
156 | 9c | œ | % 9c |
157 | 9d | % 9d | |
158 | 9e | ž | % 9e |
159 | 9е | Ÿ | % 9F |
160 | a0 | % a0 | |
161 | a1 | ¡ | % a1 |
162 | a2 | ¢ | % a2 |
163 | a3 | £ | % a3 |
164 | a4 | ¤ | % a4 |
165 | a5 | ¥ | % a5 |
166 | a6 | | | % a6 |
167 | a7 | § | % a7 |
168 | a8 | ¨ | % a8 |
169 | a9 | © | % a9 |
170 | аа | ª | % аа |
171 | аб | « | % аб |
172 | переменный ток | ¬ | % переменный ток |
173 | объявление | %объявление | |
174 | ае | ® | % ае |
175 | аф | ¯ | % аф |
176 | b0 | ° | % b0 |
177 | b1 | ± | % b1 |
178 | Би 2 | ² | %Би 2 |
179 | b3 | ³ | % b3 |
180 | b4 | ‘ | % b4 |
181 | b5 | μ | % b5 |
182 | b6 | ¶ | % b6 |
183 | b7 | · | % b7 |
184 | b8 | ¸ | % b8 |
185 | b9 | ¹ | % b9 |
186 | ба | º | % ба |
187 | бб | » | % бб |
188 | До нашей эры | ¼ | %До нашей эры |
189 | бод | ½ | % шд |
190 | быть | ¾ | %быть |
191 | Б. Ф. | ¿ | % Б.Ф. |
192 | c0 | À | % c0 |
193 | c1 | Á | % c1 |
194 | c2 | Â | % c2 |
195 | c3 | Ã | % c3 |
196 | c4 | Ä | % c4 |
197 | c5 | Å | % c5 |
198 | c6 | Æ | % v6 |
199 | c7 | БЗ | % c7 |
200 | с8 | Э. | % c8 |
201 | с9 | É | % с9 |
202 | Калифорния | Ê | % ча |
203 | центибар | Ë | % центибар |
204 | куб.см | Я | % куб.см |
205 | CD | Я | %CD |
206 | в. п. | Я | % в.п. |
207 | сравни | Я | % ср |
208 | d0 | Ð | % d0 |
209 | d1 | ЦТС | % d1 |
210 | d2 | Ò | % d2 |
211 | d3 | Ó | % d3 |
212 | d4 | Ф | % d4 |
213 | d5 | Õ | % d5 |
214 | d6 | Ö | % d 6 |
215 | d7 | × | % d7 |
216 | d8 | Ø | % d8 |
217 | d9 | Ù | % d9 |
218 | да | Ú | % да |
219 | децибел | Û | % дб |
220 | Округ Колумбия | Ü | %Округ Колумбия |
221 | дд | Ý | % дд |
222 | де | Þ | % от |
223 | Д. Ф. | ß | % Д.Ф. |
224 | e0 | à | % e0 |
225 | e1 | á | % e1 |
226 | e2 | â | % e2 |
227 | e3 | ã | % e3 |
228 | e4 | ä | % e4 |
229 | e5 | å | % e5 |
230 | e6 | æ | % e6 |
231 | e7 | ç | % e7 |
232 | e8 | è | % e8 |
233 | e9 | é | % e9 |
234 | еа | ê | % еа |
235 | Е.Б. | ë | % Е.Б. |
236 | ЕС | я | % ес |
237 | издание | я | % ред |
238 | й | я | % й |
239 | эф | я | % эф |
240 | f0 | ð | % f0 |
241 | f1 | ñ | % f1 |
242 | f2 | ò | % f2 |
243 | f3 | ó | % f3 |
244 | f4 | ô | % f4 |
245 | f5 | õ | % f5 |
246 | f6 | ö | % f6 |
247 | f7 | ÷ | % f7 |
248 | f8 | ø | % f8 |
249 | f9 | ù | % f9 |
250 | фа | ú | % метрономы |
251 | фб | û | % фб |
252 | Ь | ü | % Ь |
253 | FD | ý | % FD |
254 | Fe | þ | % Fe |
255 | Ф. Ф. | ÿ | % Ф.Ф. |
Кодировка зарезервированных символов
Ниже приведена таблица, которая будет использоваться для кодирования зарезервированных символов.
Десятичный | Шестнадцатеричное значение | голец | Кодирование URL |
---|---|---|---|
36 | 24 | $ | % 24 |
38 | 26 | & | % 26 |
43 | 2b | + | % 2b |
44 | 2с | , | % 2c |
47 | 2f | / | % 2f |
58 | 3a | : | % 3a |
59 | 3b | ; | % 3b |
61 | 3d | знак равно | % 3d |
63 | 3f | ? | % 3f |
64 | 40 | @ | % 40 |
Кодировка небезопасных символов
Ниже приведена таблица, используемая для кодирования небезопасных символов.
Что такое кодирование URL и как оно работает?
Раджив Сингх4 минуты
Введение
URL-адрес (унифицированный указатель ресурсов) — это адрес ресурса во всемирной паутине. URL-адреса имеют четко определенную структуру, которая была сформулирована в RFC 1738 Тимом Бернерсом-Ли, изобретателем всемирной паутины.
Каждый URL-адрес подтверждает общий синтаксис , который выглядит следующим образом:
схема:[//[пользователь:пароль@]хост[:порт]]путь[?запрос][#фрагмент]
Некоторые части синтаксиса URL, например [пользователь:пароль@]
, устарели и редко используются из соображений безопасности. Ниже приведен пример URL-адреса, который вы чаще всего видите в Интернете:
https://www.google.com/search?q=hello+world#brs
. Было внесено много улучшений в исходный RFC, определяющий синтаксис унифицированных указателей ресурсов (URL). Текущий документ RFC, определяющий синтаксис универсального URI, — RFC 3986. Этот пост содержит информацию из последнего документа RFC.
Кодировка URL-адреса (процентное кодирование)
URL-адрес состоит из ограниченного набора символов, принадлежащих к набору символов US-ASCII. Эти символы включают цифры (0-9), буквы (A-Z, a-z) и несколько специальных символов ( "-"
, "."
, "_"
, "~"
).
Управляющие символы ASCII (например, backspace, вертикальная табуляция, горизонтальная табуляция, перевод строки и т. д.), небезопасные символы, такие как пробел
, \
, <
, >
, {
, }
и т. д., а любые символы, не входящие в кодировку ASCII, нельзя размещать непосредственно в URL-адресах.
Кроме того, некоторые символы имеют особое значение в URL-адресах. Эти символы называются зарезервированными символами. Некоторые примеры зарезервированных символов: ?
, /
, #
, :
и т. д. Любые данные, передаваемые как часть URL, будь то строка запроса или сегмент пути, не должны содержать эти символы.
Итак, что мы делаем, когда нам нужно передать какие-либо данные в URL-адресе, который содержит эти запрещенные символы? Ну мы их кодируем!
Кодирование URL-адресовпреобразует зарезервированные, небезопасные и не-ASCII-символы в URL-адресах в формат, который повсеместно принимается и понимается всеми веб-браузерами и серверами. Сначала он преобразует символ в один или несколько байтов. Затем каждый байт представляется двумя шестнадцатеричными цифрами, которым предшествует знак процента (
%
) - (например,%xy
). Знак процента используется как escape-символ.
URL-кодирование также называется процентным кодированием, поскольку оно использует знак процента ( %
) в качестве escape-символа.
Пример кодировки URL
Пробел: Один из наиболее частых символов URL-кодировки, с которым вы, вероятно, столкнетесь, — это пробел
. Значение ASCII символа пробел
в десятичном виде равно 32
, что при преобразовании в шестнадцатеричный вид получается 20
. Теперь мы просто предваряем шестнадцатеричное представление знаком процента ( %
), что дает нам закодированное значение URL — %20
.
Справочник по кодировке символов ASCII
В следующей таблице приведены ссылки на символы ASCII в их соответствующей URL-кодированной форме.
Обратите внимание, что кодирование буквенно-цифровых символов ASCII не требуется. Например, вам не нужно кодировать символ от
'0'
до%30
, как показано в следующей таблице. Его можно передать как есть. Но кодировка по-прежнему действительна в соответствии с RFC. Все символы, которые безопасно передавать внутри URL-адресов, выделены в таблице зеленым цветом.
В следующей таблице используются правила, определенные в RFC 3986 для кодирования URL-адресов.
Decimal | Character | URL Encoding (UTF-8) | ||
---|---|---|---|---|
0 | NUL(null character) | %00 | ||
1 | SOH(start of header ) | %01 | ||
2 | STX(начало текста) | %02 | ||
3 | ETX(конец текста) | %03 | ||
4 | EOT(end of transmission) | %04 | ||
5 | ENQ(enquiry) | %05 | ||
6 | ACK(acknowledge) | % 06 | ||
7 | BEL(bell (ring)) | %07 | ||
8 | BS(backspace) | %08 | ||
9 | HT(horizontal tab) | %09 | ||
10 | LF(line feed) | %0A | ||
11 | VT(vertical tab) | %0B | ||
12 | FF(form feed) | %0C | ||
13 | CR(carriage return) | %0D | ||
14 | SO(shift out) | %0E | ||
15 | SI(shift in) | %0F | ||
16 | DLE( выход канала передачи данных) | %10 | ||
17 | DC1(device control 1) | %11 | ||
18 | DC2(device control 2) | %12 | ||
19 | DC3(device control 3) | % 13 | ||
20 | DC4(device control 4) | %14 | ||
21 | NAK(negative acknowledge) | %15 | ||
22 | SYN(synchronize) | %16 | ||
23 | ETB (блок конечной передачи) | %17 | ||
24 | CAN (CANCEL) | %18 | ||
%18 | ||||
25 | %18 | |||
25 | % | |||
25 | . | 26 | SUB(substitute) | %1A |
27 | ESC(escape) | %1B | ||
28 | FS(file separator) | %1C | ||
29 | GS(разделитель групп) | %1D | ||
30 | RS(record separator) | %1E | ||
31 | US(unit separator) | %1F | ||
32 | space | %20 | ||
33 | ! | %21 | ||
34 | " | %22 | ||
35 | # | %23 | ||
36 | $ | %24 | ||
37 | % | %25 | ||
38 | & | %26 | ||
39 | ' | %27 | ||
40 | ( | %28 | ||
41 | ) | %29 | ||
42 | * | %2A | ||
43 | + | %2B | ||
44 | , | %2C | ||
45 | - | %2D | ||
46 | . | %2E | ||
47 | / | %2F | ||
48 | 0 | %30 | ||
49 | 1 | %31 | ||
50 | 2 | %32 | ||
51 | 3 | %33 | ||
52 | 4 | 6 5 39 11127 7 | 5 | %35 |
54 | 6 | %36 | ||
55 | 7 | %37 | ||
56 | 8 | %38 | ||
57 | 9 | %39 | ||
58 | : | %3A | ||
59 | ; | %3B | ||
60 | < | %3C | ||
61 | = | %3D | ||
62 | > | %3E | ||
63 | ? | %3F | ||
64 | @ | %40 | ||
65 | A | %41 | ||
66 | B | %42 | ||
67 | C | %43 | ||
68 | D | %44 | ||
69 | E | %45 | ||
70 | F | %46 | ||
71 | G | %47 | ||
72 | H | %48 | ||
73 | I | %49 | ||
74 | J | %4A | ||
75 | K | %4B | ||
76 | L | %4C | ||
77 | M | %4D | ||
78 | N | %4E | ||
79 | O | %4F | ||
80 | P | %50 | ||
81 | Q | % 51 | ||
82 | R | %52 | ||
83 | S | %53 | ||
84 | T | %54 | ||
85 | U | %55 | ||
86 | V | %56 | ||
87 | W | %57 | ||
88 | X | %58 | ||
89 | Y | %59 | ||
90 | Z | %5A | ||
91 | [ | %5B | ||
92 | \ | %5C | ||
93 | ] | %5D | 9%5E | |
95 | _ | %5F | ||
96 | ` | %60 | ||
97 | a | %61 | ||
98 | b | %62 | ||
99 | c | %63 | ||
100 | d | %64 | ||
101 | e | %65 | ||
102 | f | %66 | ||
103 | g | %67 | ||
104 | h | %68 | ||
105 | i | %69 | ||
106 | j | %6A | ||
107 | k | %6B | ||
108 | l | %6C | ||
109 | m | %6D | ||
110 | n | %6E | ||
111 | o | %6F | ||
112 | p | %70 | ||
113 | q | %71 | ||
114 | r | %72 | ||
115 | s | %73 | ||
116 | t | %74 | ||
117 | u | %75 | ||
118 | v | %76 | ||
119 | w | %77 | ||
120 | x | %78 | ||
121 | y | %79 | ||
122 | z | %7A | ||
123 | { | %7B | ||
124 | | | %7C | ||
125 | } | %7D | ||
126 | ~ | %7E | ||
127 | DEL(удалить (удалить)) | %7F |
Сноски
Ресурс 5 9153. Какие символы делают URL-адрес недействительным?
Большинство существующих здесь ответов непрактичны, потому что они полностью игнорируют реальное использование таких адресов, как:
- https://en.wikipedia.org/wiki/Möbius_strip или
- https://zh.wikipedia.org/wiki/Википедия:关于中文维基百科/en.
Сначала небольшое отступление от терминологии. Какие это эти адреса? Являются ли они действительными URL-адресами?
Исторически ответ был "нет". Согласно RFC 3986 от 2005 года такие адреса не являются URI (и, следовательно, не URL-адресами, поскольку URL-адреса являются типом URI). Согласно терминологии стандартов IETF 2005 года, мы должны правильно называть их IRI (интернационализированными идентификаторами ресурсов), как определено в RFC 39.87, которые технически не являются URI, но могут быть преобразованы в URI просто путем процентного кодирования всех символов, отличных от ASCII, в IRI.
Согласно современной спецификации ответ "да". WHATWG Living Standard просто классифицирует все, что ранее называлось «URI» или «IRI», как «URL». Это приводит в соответствие терминологию спецификации с тем, как обычные люди, не читавшие спецификацию, используют слово «URL», что было одной из целей спецификации.
Какие символы разрешены в соответствии с WHATWG Living Standard?
В соответствии с этим новым значением «URL», какие символы разрешены? Во многих частях URL-адреса, таких как строка запроса и путь, нам разрешено использовать произвольные «единицы URL», которые равны
.кодовых точки URL и процент закодированных байтов.
Что такое "кодовые точки URL"?
Кодовые точки URL-адреса представляют собой буквенно-цифровые символы ASCII, U+0021 (!), U+0024 ($), U+0026 (&), U+0027 ('), U+0028 ЛЕВАЯ СКОБКА, U+0029 ПРАВАЯ СКОБКА , U+002A (*), U+002B (+), U+002C (,), U+002D (-), U+002E (.), U+002F (/), U+003A (:), U+003B (;), U+003D (=), U+003F (?), U+0040 (@), U+005F (_), U+007E (~) и кодовые точки в диапазоне U+ От 00A0 до U+10FFFD включительно, за исключением суррогатов и несимволов.
(Обратите внимание, что список «кодовых точек URL» не включает %
, но %
разрешены в «единицах кода URL», если они являются частью последовательности процентного кодирования.)
Единственное место, где я могу заметить, что спецификация разрешает использование любого символа, который является , а не в этом наборе, — это хост, где адреса IPv6 заключены в [
и ]
символов. Везде в URL-адресе разрешены либо единицы URL-адреса, либо еще более строгий набор символов.
Какие символы разрешались в старых RFC?
Ради истории, а также поскольку это не исследовано полностью в другом месте в ответах здесь, давайте рассмотрим, что было разрешено в соответствии с более старой парой спецификаций.
Прежде всего, у нас есть два типа зарезервированных символов RFC 3986:
-
:/?#[]@
, которые являются частью общего синтаксиса для URI, определенного в RFC 3986 . -
!$&'()*+,;=
, которые не являются частью общего синтаксиса RFC, но зарезервированы для использования в качестве синтаксических компонентов определенных схем URI. Например, точки с запятой и запятые используются как часть синтаксиса URI данных, и&
и=
используются как часть вездесущего формата?foo=bar&qux=baz
в строках запросов (который не является , указанным в RFC 3986).
Любой из указанных выше зарезервированных символов может быть законно использован в URI без кодирования либо для выполнения своих синтаксических целей, либо просто в качестве буквенных символов в данных в некоторых местах, где такое использование не может быть неправильно истолковано как символ, служащий его синтаксическому назначению. (Например, хотя /
имеет синтаксическое значение в URL-адресе, вы можете использовать его незакодированным в строке запроса, потому что не имеет значение в строке запроса. )
RFC 3986 также указывает некоторые незарезервированных символов, которые всегда можно использовать просто для представления данных без какой-либо кодировки:
-
abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-._~
Наконец, сам символ %
разрешен для процентного кодирования. 9`{|}
Любой другой символ из ASCII может по закону использоваться в URL-адресе.
Затем RFC 3987 расширяет этот набор незарезервированных символов следующими диапазонами символов Юникода:
%xA0-D7FF / %xF900-FDCF / %xFDF0-FFEF / %x10000-1FFFD / %x20000-2FFFD / %x30000-3FFFD / %x40000-4FFFD / %x50000-5FFFD / %x60000-6FFFD / %x70000-7FFFD / %x80000-8FFFD / %x-9FFFD / %xA0000-AFFFD / %xB0000-BFFFFD / %xC0000-CFFFD / %xD0000-DFFFD / %xE1000-EFFFD
Эти варианты блоков из старой спецификации кажутся странными и произвольными, учитывая последние определения блоков Unicode; вероятно, это связано с тем, что блоки были добавлены за десятилетие, прошедшее с момента написания RFC 3987.