Elenco di caratteri validi per l’identificatore di frammento in un URL?

Sto usando l’identificatore di frammento per creare un permalink per eventi AJAX nella mia app Web simile a questo ragazzo . Qualcosa di simile a:

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

Ho fatto un bel po ‘di ricerche ma non riesco a trovare un elenco di caratteri validi per il frammento idenitifer. Le specifiche del W3C non offrono nulla.

Devo codificare i caratteri nello stesso modo dell’URL in generale?

Non sembrano esserci buone informazioni su questo ovunque.

Vedi la RFC 3986 .

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

Quindi puoi usare ! , $ , & , ' , ( , ) , * , + ; , = , qualcosa che corrisponde a %[0-9a-fA-F]{2} , qualcosa che corrisponde a [a-zA-Z0-9] , - [a-zA-Z0-9] , _ , ~ , : , @ , / , e ?

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

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

e

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

Quindi, combinato, il frammento non può contenere # , un grezzo % , ^ , [ , ] , { , } , \ , " , < e > secondo la RFC.

Un altro RFC parla di questo: RFC-1738

 URL schemeparts for ip based protocols: HTTP httpurl = "http://" hostport [ "/" hpath [ "?" search ]] hpath = hsegment *[ "/" hsegment ] hsegment = *[ uchar | ";" | ":" | "@" | "&" | "=" ] search = *[ uchar | ";" | ":" | "@" | "&" | "=" ]