2013-06-11 3 views
5

У меня есть URI, который содержит ## (например, http://foo.com/bar##baz). Функция Ruby's URI.parse вызывает ошибку при попытке ее проанализировать.Являются ли URI с двойным хешем (##) недействительными?

Являются ли двойные метки хешей запрещенными в URI? Или Рубинский Парсер слишком строг?

+0

Возможный дубликат [Идентификаторы нескольких фрагментов верны в URL?] (Http://stackoverflow.com/questions/4714268/multiple-fragment-identifiers-correct-in-url) – Gumbo

ответ

12

Fragment Identifiers не может содержать знак хеша. Парсер правильно.

Синтаксис для идентификатора фрагмента определяется следующим образом:

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

pchar is defined as:

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

unreserved, pct-encoded и sub-delims определяются как:

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

pct-encoded = "%" HEXDIG HEXDIG 

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

+1 для ссылок на спецификацию. –

3

Недействительны. A # указывает, что остаток является фрагментом , а фрагмент может не содержать #.

0

Адресный это позволяет :

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

Адресный адрес должен соответствовать более близко к rfc, но wko знает. Я бы сказал, что это подлежит интерпретации.

Смежные вопросы