Liste der gültigen Zeichen für die Fragmentkennung in einer URL?


85

Ich verwende die Fragment-ID, um einen Permalink für AJAX-Ereignisse in meiner Web-App zu erstellen , der diesem Typ ähnelt . Etwas wie:

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

Ich habe ziemlich viel gesucht, kann aber keine Liste gültiger Zeichen für das Fragment idenitifer finden. Die W3C-Spezifikation bietet nichts.

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

Es scheint nirgendwo gute Informationen dazu zu geben.

Antworten:


98

Siehe RFC 3986 .

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

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


Perfekt, ich habe im RFC danach gesucht, aber anscheinend nicht die richtige Klausel gefunden. Vielen Dank.
Sohtimsso1970

1
@Artefacto, Bedeutet das also, dass ein "%" nicht überall erlaubt ist, sondern nur , wenn zwei gültige Zeichen darauf folgen?
Pacerier

1
@Pacerier ja, %ist nur als Escapezeichen erlaubt. Verwenden Sie %25diese Option, um eine einzelne zu codieren %.
Gioele

1
Die Zurück / Vorwärts-Schaltfläche funktioniert nicht mit Fragment-IDs, die einen Doppelpunkt haben, obwohl der RFC angibt, dass es sich um ein gültiges Zeichen handelt.
Vince

Beeindruckend! Wäre wahrscheinlich einfacher zu sagen, welche ASCII-Zeichen nicht verwendet werden können!
e2-e4

30

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 das Fragment nicht enthalten #, ein rohes %, ^, [, ], {, }, \, ", <und >nach dem RFC.


Vielen Dank. Hat Artefacto die Antwort gegeben, da er ein Haar schneller war, aber dir +1 für die Antwort gegeben hat.
Sohtimsso1970

2
Ich nehme an, Sie vermissen nicht druckbare ASCII-Zeichen und Nicht-ASCII-Zeichen.
Artefacto

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

2

Ein anderer RFC spricht davon: RFC-1738

URL schemeparts for ip based protocols:
HTTP

httpurl        = "http://" hostport [ "/" hpath [ "?" search ]]
hpath          = hsegment *[ "/" hsegment ]
hsegment       = *[ uchar | ";" | ":" | "@" | "&" | "=" ]
search         = *[ uchar | ";" | ":" | "@" | "&" | "=" ]
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.