【问题标题】:Are URI's with a double hash (##) invalid?带有双哈希 (##) 的 URI 是否无效?
【发布时间】:2013-06-07 22:58:43
【问题描述】:

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

在 URI 中是否禁止使用双井号标记?还是 Ruby Parser 太严格了?

【问题讨论】:

标签: ruby uri fragment-identifier


【解决方案1】:

它们是无效的。一个#表示余数是一个fragment,一个fragment里面可能没有#

【讨论】:

    【解决方案2】:

    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  = "!" / "$" / "&" / "'" / "(" / ")" / "*" / "+" / "," / ";" / "="
    

    【讨论】:

      【解决方案3】:

      Addressable 允许它:

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

      Addressable 应该更符合 rfc,但 wko 知道。我会说它需要解释。

      【讨论】:

        猜你喜欢
        • 2012-01-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-02-28
        • 1970-01-01
        • 1970-01-01
        • 2018-09-09
        相关资源
        最近更新 更多