我正在制作支持 Google DFP广告管理系统的播放器。广告服务器有一个VAST链接,它是XML类型,包含媒体文件,曲目链接,clickLink等...
clickLinks包含重定向到原始网址的网址,我无法正确解码。
我尝试使用stringByAddingPercentEscapesUsingEncoding
进行解码,然后重新编码,但NSURL似乎已被破坏。
原始VastURL是:
如何正确地将其转换为NSURL
?
答案 0 :(得分:5)
仔细阅读你的问题。您说您要解码URL并调用一个名为
的方法stringByAddingPercentEscapesUsingEncoding
^^^^^^
尝试使用stringByRemovingPercentEncoding
。这应该解码您的URL。
对于另一个问题,如何"演员"它是NSURL:强制转换意味着您强制调试器将变量视为特定类型。这意味着您无法转换对象并将其转换为另一种类型的实例。
您必须使用字符串创建NSURL 的实例:
NSURL *URL = [NSURL URLWithString:[URLString stringByRemovingPercentEncoding]];
答案 1 :(得分:0)
您可以使用componentsSeparatedByString
。
示例:
NSString* url = @"https://pubads.g.doubleclick.net/gampad/ads?sz=624x352&iu=/131302407/Uzman_Dky&impl=s&gdfp_req=1&env=vp&output=xml_vast2&unviewed_position_start=1&url=[referrer_url]&description_url=[description_url]&correlator=1443516172";
NSArray* components = [url componentsSeparatedByString:@"&"];
for (NSString* str in components)
{
NSArray* keyval = [str componentsSeparatedByString:@"="];
// keyval[0] is your key
// keyval[1] is your value
NSLog(@"key: %@ | value: %@", keyval[0], keyval[1]);
}
示例输出:
key: https://pubads.g.doubleclick.net/gampad/ads?sz | value: 624x352
key: iu | value: /131302407/Uzman_Dky
key: impl | value: s
key: gdfp_req | value: 1
key: env | value: vp
key: output | value: xml_vast2
key: unviewed_position_start | value: 1
key: url | value: [referrer_url]
key: description_url | value: [description_url]
key: correlator | value: 1443516172
您获得的网址可以由stringByRemovingPercentEscapesUsingEncoding
解码,以删除所有转义序列。
答案 2 :(得分:0)
问题是,url依赖于CDATA,这就是它无法正确解码/编码的原因。我使用了 - (void) parser:(NSXMLParser *)parser foundCDATA:(NSData *)CDATABlock{
委托方法并编码了这样的字符串:
NSString *string = [[NSString alloc] initWithData:CDATABlock encoding:NSUTF8StringEncoding];
比我分配给NSURL没有任何问题。