Согласно RFC 3986, символы в URL ограничены только определенным набором зарезервированных символов US-ASCII. Любые другие символы не допускаются в URL.
Но URL часто содержит символы вне набора символов US-ASCII, поэтому они должны быть преобразованы в действительный формат US-ASCII для совместимости.
Чтобы отобразить широкий спектр символов, используемых во всем мире, используется двухэтапный процесс:
- Сначала данные кодируются в соответствии с кодировкой символов UTF-8.
- Только те байты, которые не соответствуют символам в незарезервированном наборе, должны кодироваться в процентах, например, %HH, где HH — шестнадцатеричное значение символа.
Например, строка François будет закодирована как Fran%C3%A7ois
Зарезервированные символы
Определенные символы зарезервированы для использования в URL-адресе, поскольку они используются для синтаксиса в схеме URL-адресов. Например, косая черта /
используются для разделения различных частей URL-адреса.
Если данные для URL-компонента содержат символ, который может конфликтовать с зарезервированным набором символов в схеме URL, тогда конфликтующий символ должен быть закодирован в процентах до формирования URL. Зарезервированные символы в URL:
! |
# |
$ |
& |
' |
( |
) |
* |
+ |
, |
/ |
: |
; |
= |
? |
@ |
[ |
] |
%21 |
%23 |
%24 |
%26 |
%27 |
%28 |
%29 |
%2A |
%2B |
%2C |
%2F |
%3A |
%3B |
%3D |
%3F |
%40 |
%5B |
%5D |
Незарезервированные символы
К незарезервированным символам относятся прописные и строчные буквы, десятичные цифры, дефис, точка, подчеркивание и тильда. В следующей таблице перечислены все незарезервированные символы в URL:
A |
B |
C |
D |
E |
F |
G |
H |
I |
J |
K |
L |
M |
N |
O |
P |
Q |
R |
S |
T |
U |
V |
W |
X |
Y |
Z |
a |
b |
c |
d |
e |
f |
g |
h |
i |
j |
k |
l |
m |
n |
o |
p |
q |
r |
s |
t |
u |
v |
w |
x |
y |
z |
0 |
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
- |
_ |
. |
~ |