【发布时间】:2013-06-07 22:58:43
【问题描述】:
我的 URI 包含 ##(例如 http://foo.com/bar##baz)。当我尝试解析 Ruby 的 URI.parse 函数时,它会引发错误。
在 URI 中是否禁止使用双井号标记?还是 Ruby Parser 太严格了?
【问题讨论】:
标签: ruby uri fragment-identifier
我的 URI 包含 ##(例如 http://foo.com/bar##baz)。当我尝试解析 Ruby 的 URI.parse 函数时,它会引发错误。
在 URI 中是否禁止使用双井号标记?还是 Ruby Parser 太严格了?
【问题讨论】:
标签: ruby uri fragment-identifier
它们是无效的。一个#表示余数是一个fragment,一个fragment里面可能没有#。
【讨论】:
Fragment Identifiers 可能不包含井号。解析器是正确的。
片段标识符的语法定义如下:
fragment = *( pchar / "/" / "?" )
pchar = unreserved / pct-encoded / sub-delims / ":" / "@"
unreserved、pct-encoded 和 sub-delims 定义为:
unreserved = ALPHA / DIGIT / "-" / "." / "_" / "~"
pct-encoded = "%" HEXDIG HEXDIG
sub-delims = "!" / "$" / "&" / "'" / "(" / ")" / "*" / "+" / "," / ";" / "="
【讨论】:
Addressable 允许它:
require 'addressable/uri'
Addressable::URI.parse('http://foo.com/bar##baz').fragment
#=> "#baz"
Addressable 应该更符合 rfc,但 wko 知道。我会说它需要解释。
【讨论】: