NSURL应该解析无效的URL吗?

时间:2010-08-11 20:31:41

标签: iphone cocoa cocoa-touch ios

我在文档中找不到这个。

我正在编写一些单元测试,其中一个应该失败的测试是[NSURL URLWithString: @"cow"]。因为cow不是有效的网址。

然而,NSURL很好地解析了它,没有任何错误。它不会返回nil并且不会抛出异常。在其上调用[url absoluteString]会将其转回@"cow"

这里发生了什么? NSURL真的应该允许吗?

2 个答案:

答案 0 :(得分:3)

NSURL允许相对URL,其中包括“cow”。

RFC 2396中给出的URI的一般形式允许相对引用:

URI-reference = [ absoluteURI | relativeURI ] [ "#" fragment ]
relativeURI   = ( net_path | abs_path | rel_path ) [ "?" query ]
rel_path      = rel_segment [ abs_path ]
rel_segment   = 1*( unreserved | escaped |
                      ";" | "@" | "&" | "=" | "+" | "$" | "," )

除非我误读,否则这意味着任何有效字符序列都可以形成有效的相对URL。

答案 1 :(得分:0)

来自+ URLWithString的文档:

  

要初始化的字符串   NSURL对象。必须符合RFC   该方法根据RFC 1738和1808解析URLString。   ...   如果字符串格式错误,则返回nil。

不熟悉RFC 2396,我不能肯定地说,但我认为你必须拥有最少的协议和主机(即使域本身转发给主机)。我当然希望没有。

如果你没有通过传递@“cow”获得“nil”,你应该在bugreporter.apple.com上提交一个错误。你可能想要标题,“不要有牛。”