2013-06-11 17 views
5

Ich habe URI, die ## enthält (z.B. http://foo.com/bar##baz). Rubys URI.parse-Funktion gibt einen Fehler aus, wenn ich versuche, es zu analysieren.Sind URIs mit einem doppelten Hash (##) ungültig?

Sind doppelte Hash-Marken in URIs verboten? Oder ist der Ruby Parser zu streng?

+0

möglich Duplikat von [Mehrere Fragment-IDs in URL korrekt?] (Http://stackoverflow.com/questions/4714268/multiple-fragment-identifiers-correct-in-url) – Gumbo

Antwort

12

Fragment Identifiers darf kein Hash-Zeichen enthalten. Der Parser ist korrekt.

Die Syntax für eine Fragment-ID ist wie folgt definiert:

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

pchar is defined as:

pchar = unreserved/pct-encoded/sub-delims/":"/"@" 

unreserved, pct-encoded und sub-delims sind definiert als:

unreserved = ALPHA/DIGIT/"-"/"."/"_"/"~" 

pct-encoded = "%" HEXDIG HEXDIG 

sub-delims = "!"/"$"/"&"/"'"/"("/")"/"*"/"+"/","/";"/"=" 
+1

+1 für Verweise auf die Spezifikation. –

3

Sie sind ungültig. A # zeigt an, dass der Rest ein Fragment ist und ein Fragment möglicherweise kein # drin hat.

0

Adressierbare ermöglicht es :

require 'addressable/uri' 
Addressable::URI.parse('http://foo.com/bar##baz').fragment 
#=> "#baz" 

Adressierbar soll besser zu den RFCs passen, aber wko weiß es. Ich würde sagen, dass es Interpretationen gibt.