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

Jim*_*ler 14 iphone objective-c ios

在IOS下,我希望识别出NSURL相同或略有不同但引用相同目的地的s 对.例如http://google.comVS 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
}
Run Code Online (Sandbox Code Playgroud)

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

Jer*_*myP 19

根据RFC 2616,http://google.com并且http://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网址是专门检查一个空的绝对路径.