2013-06-11 16 views
5

我的URI包含##(例如http://foo.com/bar##baz)。當我嘗試解析它時,Ruby的URI.parse函數會引發錯誤。具有雙重散列(##)的URI是無效的嗎?

是否在URI中禁止使用雙重哈希標記?還是Ruby分析器太嚴格了?

+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/":"/"@" 

unreservedpct-encodedsub-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知道。我會說這是受解釋。