Список допустимых символов для идентификатора фрагмента в URL? - PullRequest
83 голосов
/ 17 мая 2010

Я использую идентификатор фрагмента, чтобы создать постоянную ссылку для событий AJAX в моем веб-приложении аналогично этому парню . Что-то вроде:

http://www.myapp.com/calendar#filter:year/2010/month/5

Я довольно много искал, но не могу найти список допустимых символов для фрагмента идентификатора. W3C spec ничего не предлагает.

Нужно ли кодировать символы так же, как в общем URL-адресе?

Кажется, нигде нет хорошей информации об этом.

Ответы [ 3 ]

92 голосов
/ 17 мая 2010

См. RFC 3986 .

fragment    = *( pchar / "/" / "?" )
pchar         = unreserved / pct-encoded / sub-delims / ":" / "@"    
unreserved    = ALPHA / DIGIT / "-" / "." / "_" / "~"
pct-encoded   = "%" HEXDIG HEXDIG
sub-delims    = "!" / "$" / "&" / "'" / "(" / ")"
                 / "*" / "+" / "," / ";" / "="

Таким образом, вы можете использовать !, $, &, ', (, ), *, +, ,, ;, = что-то соответствует %[0-9a-fA-F]{2}, что-то соответствует [a-zA-Z0-9], -, ., _, ~, :, @, / и ?

30 голосов
/ 17 мая 2010

http://tools.ietf.org/html/rfc3986#section-3.5:

fragment    = *( pchar / "/" / "?" )

и

pchar         = unreserved / pct-encoded / sub-delims / ":" / "@"
unreserved    = ALPHA / DIGIT / "-" / "." / "_" / "~"
sub-delims    = "!" / "$" / "&" / "'" / "(" / ")"
              / "*" / "+" / "," / ";" / "="
pct-encoded   = "%" HEXDIG HEXDIG

Итак, вместе взятый, фрагмент не может содержать #, необработанный %, ^, [, ], {, }, \ ", < и > в соответствии с RFC.

1 голос
/ 02 апреля 2014

Еще один RFC говорит об этом: RFC-1738

URL schemeparts for ip based protocols:
HTTP

httpurl        = "http://" hostport [ "/" hpath [ "?" search ]]
hpath          = hsegment *[ "/" hsegment ]
hsegment       = *[ uchar | ";" | ":" | "@" | "&" | "=" ]
search         = *[ uchar | ";" | ":" | "@" | "&" | "=" ]
...