我正在编写单元测试以测试URL生成器类。
我正在使用NSURLComponents componentsWithString]
生成最终的URL对象。
是否存在关于componentsWithString
如何转义正斜杠(/)的规则?
案例1:
NSURLComponents *urlComponents = [NSURLComponents componentsWithString: @"/foo"];
urlComponents.scheme = @"http";
urlComponents.host = [NSString stringWithFormat:@"www.bar.com"];
// [urlComponents URL] = http://www.bar.com/foo - Seems okay
案例2:
NSURLComponents *urlComponents = [NSURLComponents componentsWithString: @"////foo"];
urlComponents.scheme = @"http";
urlComponents.host = [NSString stringWithFormat:@"www.bar.com"];
// [urlComponents URL] = http://www.bar.com//foo
案例3:
NSURLComponents *urlComponents = [NSURLComponents componentsWithString: @"//////foo"];
urlComponents.scheme = @"http";
urlComponents.host = [NSString stringWithFormat:@"www.bar.com"];
// [urlComponents URL] = http://www.bar.com////foo
为什么情况2和3分别将斜杠的数量减少到2和4?
答案 0 :(得分:0)
您的情况2和3不符合NSURLComponents文档https://developer.apple.com/documentation/foundation/nsurlcomponents?language=objc
中指定的RFC 3986路径格式。NSURLComponents类是旨在根据RFC 3986解析URL并从其组成部分构造URL的类。
在RFC 3986规范的路径部分:https://tools.ietf.org/html/rfc3986#section-3.3中,它提到您的路径不能以//
开头,除非存在授权组件:
如果是URI 不包含授权组件,则路径无法开始 带有两个斜杠字符(“//")。
如果将情况2和3调整为至少介于两个字符之间,如下所示:
NSURLComponents *urlComponents = [NSURLComponents componentsWithString: @"/a/////foo"];
我相信它应该输出正确数量的斜杠。