我的URI包含##
(例如http://foo.com/bar##baz
)。当我尝试解析它时,Ruby的URI.parse
函数会抛出一个错误。
URI中是否禁止双哈希标记?或者Ruby Parser太严格了吗?
答案 0 :(得分:12)
Fragment Identifiers可能不包含井号。解析器是正确的。
片段标识符的语法定义如下:
fragment = *( pchar / "/" / "?" )
pchar = unreserved / pct-encoded / sub-delims / ":" / "@"
unreserved
,pct-encoded
和sub-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知道。我会说它需要解释。