我正在编写RSS阅读器并从Feed中获取文章网址,但在使用NSXMLParser进行解析时通常会使用无效的网址。有时在url的末尾有额外的符号(例如\ n,\ t)。这个问题我修好了。 最困难的问题是具有不允许进行url编码的字符的查询的网址。 URL-request http://www.bbc.co.uk/news/education-23809095#sa-ns_mchannel=rss&ns_source=PublicRSS20-sa的工作网址 '#'字符将被“stringByAddingPercentEscapesUsingEncoding:”方法替换为“%23”,并且不起作用。网站将说明未找到的页面。我相信'#'后面的字符是一个查询字符串。 有没有办法正确地从feed中获取(编码)任何url,至少总是从xml中删除查询字符串?
答案 0 :(得分:3)
您可以使用两种方法创建合法的URL字符串,方法是使用stringByAddingPercentEncodingWithAllowedCharacters
或使用CFURL
核心基础类,它为您提供了一系列选项。
示例1(NSCharacterSet):
NSString *nonFormattedURL = @"http://www.bbc.co.uk/news/education-23809095#sa-ns_mchannel=rss&ns_source=PublicRSS20-sa";
NSLog(@"%@", [nonFormattedURL stringByAddingPercentEncodingWithAllowedCharacters:[[NSCharacterSet illegalCharacterSet] invertedSet]]);
这仍然通过反转NSCharacterSet对象中的illegalCharacterSet来保持哈希标记的位置。如果你想要更多控制,你也可以创建自己的可变集。
示例2(CFURL.h):
NSString *nonFormattedURL = @"http://www.bbc.co.uk/news/education-23809095#sa-ns_mchannel=rss&ns_source=PublicRSS20-sa";
CFAllocatorRef allocator = CFAllocatorGetDefault();
CFStringRef formattedURL = CFURLCreateStringByAddingPercentEscapes(allocator,
(__bridge CFStringRef) nonFormattedURL,
(__bridge CFStringRef) @"#", //leave unescaped
(__bridge CFStringRef) @"", // legal characters to be escaped like / = # ? etc
NSUTF8StringEncoding); // encoding
NSLog(@"%@", formattedURL);
与上面的代码相同但有更多控制:根据指定的编码用等效百分比转义序列替换某些字符,例如参见日志。