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

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

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

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

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

Кажется, что в этом нет никакой хорошей информации.

Ответ 1

См. 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], -, ., _, ~, :, @, / и ?

Ответ 2

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

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

Ответ 3

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

URL schemeparts for ip based protocols:
HTTP

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