gpt4 book ai didi

objective-c - 比较两个 NSURL 或一个 NSURL 和一个 NSString 的可靠方法?

转载 作者:太空狗 更新时间:2023-10-30 03:14:23 36 4
gpt4 key购买 nike

我最近在比较两个 NSURL 并将一个 NSURL 与 NSString(这是一个 URL 地址)进行比较时遇到了一个问题,情况是我从某个地方得到了一个 NSURLRequest,我可能知道也可能不知道它指向的 URL 地址,我有一个 URL NSString,比如说“http://m.google.com”,现在我需要检查那个 NSURLRequest 中的 URL 是否与我的 URL 字符串相同:

[[request.URL.absoluteString lowercaseString] isEqualToString: [self.myAddress lowercaseString]];

这返回 NO 因为 absoluteString 给我“http://m.google.com/”而我的字符串是“http://m.google.com”没有斜线结束,即使我使用

创建 NSURLRequest
[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://m.google.com"]]

对于 absoluteString,它仍然给我“http://m.google.com/”,我想知道是否有任何可靠的方法来比较 NSURL 或一个 NSURL 和一个 NSString?

  1. 检查一个是否“包含”另一个,但这并不可靠,因为“http://m.google.com/blabla”包含“http://m.google.com”。

  2. 将 NSString 转换为 NSURL 并使用 isEqual 方法比较两个 NSURL,希望 NSURL 的 isEqual 实现可以解决这个问题?

  3. 基于步骤 2,但使用 standardizedURL 将每个 NSURL 转换为标准 URL?

非常感谢!

最佳答案

如果你只关心尾部斜杠的歧义,你可以通过知道 NSURL 路径修剪尾部斜杠来快速免除这个问题。

但我喜欢 NSURL 上的类别方法的想法,它实现了一些基于标准的等价(在这种情况下,“等价”可能是比等价更好的术语)。

@RobNapier 提到了一个相关的问题,它有一个很好的答案,指向 RFC2616 .另一个与 url 语法相关的标准是 RFC1808 .

困难的部分是决定我们所说的等价是什么意思,例如,不同的查询或片段( anchor 链接)呢?对于大多数这些歧义,下面的代码在宽容方面犯了错误......

// in NSURL+uriEquivalence.m

- (BOOL)isEquivalent:(NSURL *)aURL {

if ([self isEqual:aURL]) return YES;
if ([[self scheme] caseInsensitiveCompare:[aURL scheme]] != NSOrderedSame) return NO;
if ([[self host] caseInsensitiveCompare:[aURL host]] != NSOrderedSame) return NO;

// NSURL path is smart about trimming trailing slashes
// note case-sensitivty here
if ([[self path] compare:[aURL path]] != NSOrderedSame) return NO;

// at this point, we've established that the urls are equivalent according to the rfc
// insofar as scheme, host, and paths match

// according to rfc2616, port's can weakly match if one is missing and the
// other is default for the scheme, but for now, let's insist on an explicit match
if ([self port] || [aURL port]) {
if (![[self port] isEqual:[aURL port]]) return NO;
if (![[self query] isEqual:[aURL query]]) return NO;
}

// for things like user/pw, fragment, etc., seems sensible to be
// permissive about these.
return YES;
}

关于objective-c - 比较两个 NSURL 或一个 NSURL 和一个 NSString 的可靠方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12310258/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com