Каковы допустимые символы во фрагменте URL (location.hash)?
Контекст: я создаю приложение, которое хранит свои данные в location.hash. Я хочу закодировать как можно меньше символов, чтобы обеспечить максимальную разборчивость.
Как объясняется в этом ответе, зарезервированные символы различны для каждого сегмента URL. Итак, каковы ограничения для URL Fragment/location.hash конкретно?
Связанный пост: символы Юникода в URL
1 ответ
Согласно RFC 3986: унифицированный идентификатор ресурса (URI):
fragment = *( pchar / "/" / "?" )
pchar = unreserved / pct-encoded / sub-delims / ":" / "@"
unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~"
pct-encoded = "%" HEXDIG HEXDIG
sub-delims = "!" / "$" / "&" / "'" / "(" / ")"
/ "*" / "+" / "," / ";" / "="
Распаковывая все это и игнорируя процентную кодировку, я нахожу следующий набор символов:
abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-._~!$&'()*+,;=:@/?
Хотя RFC не предписывает определенную кодировку и обрабатывает только символы (не байты), согласно Разделу 2.3 ALPHA
означает только ASCII, то есть 26 букв латинского алфавита. Поэтому любые не-ASCII буквы должны быть закодированы в процентах.