2010-05-17 4 views
71

Ich verwende die Fragment-ID, um einen Permalink für AJAX-Ereignisse in meiner Webanwendung similar to this guy zu erstellen. Etwas wie:Liste der gültigen Zeichen für die Fragmentkennung in einer URL?

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

ich ziemlich viel die Suche gemacht haben, kann aber nicht eine Liste der gültigen Zeichen für das Fragment idenitifer finden. Die bietet nichts.

Muss ich die Zeichen genauso kodieren wie die URL im Allgemeinen?

Es scheint keine guten Informationen zu diesem Thema zu geben.

Antwort

81

Siehe RFC 3986.

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

So können Sie ! verwenden, $, &, ', (, ), *, +, ,, ;, =, passend etwas %[0-9a-fA-F]{2}, etwas passend [a-zA-Z0-9], -, ., _, ~, : , @, / und ?

+0

Perfect, ich wurde in der RFC für das suchen, konnte aber nicht scheinen, um die richtige Klausel zu finden. Vielen Dank. – sohtimsso1970

+0

Für Räume ist es ein + oder ein% 20? Angular scheint zu behandeln und buchstäblich ... –

+2

@AndreaRatto '% 20' – Artefacto

28

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

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

und

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

So kombiniert wird, kann das Fragment nicht#, ein rohes %, ^, [, ], {, }, \, " enthalten < und > gemäß der RFC.

+0

Danke. Gab die Antwort auf Artefacto, da er ein Haar schneller war aber gab Ihnen +1 für die Antwort. – sohtimsso1970

+2

Vermutlich fehlen nicht druckbare ASCII-Zeichen und nicht-ASCII-Zeichen. – Artefacto

+0

Scheint, dass Sie '' VERTICAL BAR (|) '' und '' GRAY ACCENT (')' 'und' 'SPACE()' 'in der Nicht-Liste vergessen haben. Die vollständige Liste der druckbaren (7-Bit) US-ASCII-Zeichen in der Nicht-Liste lautet also: '' # # # < > [\]^'{|}' ' – GitaarLAB

0

Eine andere RFC sprechen dafür: RFC-1738

URL schemeparts for ip based protocols: 
HTTP 

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