2013-06-11 10 views
5

Mam identyfikator URI, który zawiera ## (np. http://foo.com/bar##baz). Funkcja Ruby o numerze URI.parse zgłasza błąd podczas próby przeanalizowania go.Czy identyfikatory URI z podwójnym hashiem (#) są nieprawidłowe?

Czy podwójne znaki krzyżyka są zabronione w identyfikatorach URI? Czy też Ruby Parser jest zbyt surowy?

+0

możliwy duplikat [Wiele identyfikatorów fragmentów poprawnych w adresie URL?] (Http://stackoverflow.com/questions/4714268/multiple-fragment-identifiers-correct-in-url) – Gumbo

Odpowiedz

12

Fragment Identifiers nie może zawierać znaku krzyżyka. Analizator składni jest poprawny.

Składnia identyfikator fragmentu określa się w następujący sposób:

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

pchar is defined as:

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

unreserved, pct-encoded i sub-delims są zdefiniowane jako:

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

pct-encoded = "%" HEXDIG HEXDIG 

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

+1 dla odniesień do specyfikacji. –

3

Są one nieważne. A # wskazuje, że resztą jest fragment, a fragment może nie mieć w sobie .

0

adresowalny to pozwala :

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

Adresowalne ma być bardziej zgodne z rfc, ale wko wie. Powiedziałbym, że to podlega interpretacji.

Powiązane problemy