在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意图的字符串差异?
答案 0 :(得分: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网址比较方法创建一个类别,专门检查空的绝对路径。