如何比较实际上相当但有化妆品字符串差异的两个NSURL?

时间:2011-04-27 08:58:31

标签: iphone objective-c ios

在IOS下,我希望识别成对的NSURL,它们相同或稍有不同但引用相同的目的地。例如http://google.com vs http://google.com/

isEquals报告这些NSURL是不同的。我也无法找到获得NSURL的“规范”或“规范化”形式的方法来比较这些形式。

NSURL *a = [NSURL URLWithString:@"http://google.com"];
NSURL *b = [NSURL URLWithString:@"http://google.com/"];

if([a isEqual:b]) {
  NSLog(@"Same"); // Not run
}

if([[a absoluteURL] isEqual:[b absoluteURL]]) {
  NSLog(@"Same"); // Still not run
}

if([[a URLByStandardizingPath] isEqual:[b URLByStandardizingPath]]) {
  NSLog(@"Same"); // Still not run
}

如何比较两个NSURL,同时忽略不影响URL意图的字符串差异?

1 个答案:

答案 0 :(得分:19)

根据RFC 2616http://google.comhttp://google.com/是等效的。这就是它所说的(第3.2.3节):

  

当比较两个URI以确定它们是否匹配时,客户端应该使用对整个URI进行区分大小写的八位字节比较,除了以下例外:

     
      
  • 空的或未给出的端口等同于该URI引用的默认端口;

  •   
  • 主机名的比较必须不区分大小写;

  •   
  • 方案名称的比较必须不区分大小写;

  •   
  • 空abs_path相当于“/".

  • 的abs_path   

供参考,语法为http_URL = "http:" "//" host [ ":" port ] [ abs_path [ "?" query ]]

不幸的是,NSURL必须支持HTTP以外的方案,因此不能假设RFC 2616提供了通用规则。我认为您最好的解决方法是使用您自己的http网址比较方法创建一个类别,专门检查空的绝对路径。