Каковы допустимые символы во фрагменте 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 буквы должны быть закодированы в процентах.

Другие вопросы по тегам