URI是否带有双哈希(##)无效?

时间:2013-06-11 22:57:46

标签: ruby uri fragment-identifier

我的URI包含##(例如http://foo.com/bar##baz)。当我尝试解析它时,Ruby的URI.parse函数会抛出一个错误。

URI中是否禁止双哈希标记?或者Ruby Parser太严格了吗?

3 个答案:

答案 0 :(得分: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 :(得分:3)

它们无效。 #表示其余部分是片段片段中可能没有#

答案 2 :(得分:0)

可寻址允许:

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

可寻址应该更接近rfc,但是wko知道。我会说它需要解释。