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


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

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

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

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

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

3 76

3 ответа:

посмотреть 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],-,.,_,~,:,@,/ и ?

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.

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

URL schemeparts for ip based protocols:
HTTP

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