正确解码字符串url的转换在NSURL



我正在制作支持Google DFP adserver的播放器。广告服务器有一个广阔的链接,它是XML类型的,包含媒体文件,轨道链接,点击链接等…

clickLinks包含一个重定向url到原始url,我无法正确解码。

链接如下:https://pubads.g.doubleclick.net/aclk?sa=L&ai=B2JSpRFcKVq_SAsifbr-gqPAE9-CGpQcAAAAQASCPsd4lOABY37Owp4gCYJn-noa4IboBCzYyNHgzNTJfeG1syAEF2gEFaHR0cDqpArGOjXR685U-wAIC4AIA6gIULzEzMTMwMjQwNy9Vem1hbl9Ea3n4AvTRHpADhAeYA4QHqAMB0ASQTuAEAZAGAaAGI9gHAQ&num=0&cid=5Ggrgwo88gHDUD7JBb6uTLxZ&sig=AOD64_0xhsqN4jSnVOZ-eKo9KCVTet61iQ&client=ca-pub-3069068742246799&adurl=http://dkykartal.com/%3Futm_source%3DUzmanTV%26utm_medium%3DVideo_PreRoll%26utm_content%3DDKY_Kartal%26utm_campaign%3DDKY_Kartal_IBillBoard

我试图通过使用stringByAddingPercentEscapesUsingEncoding解码,然后再次编码,但NSURL似乎被打破了。

原VastURL为:

https://pubads.g.doubleclick.net/gampad/ads?sz=624x352& iu =/131302407/Uzman_Dky& impl = s& gdfp_req = 1, env = vp&输出= xml_vast2& unviewed_position_start = 1, url = [referrer_url], description_url = [description_url],相关器= 1443516172

如何正确地将其转换为NSURL

再仔细读一遍你的问题。你说你想解码URL并调用一个名为

的方法
stringByAddingPercentEscapesUsingEncoding
        ^^^^^^

尝试使用stringByRemovingPercentEncoding。这将解码您的URL。

对于另一个问题,如何将其"强制转换"为NSURL:强制转换意味着您正在强制调试器将变量视为特定类型。这意味着不能强制转换对象并将其转换为另一类型的实例。

你必须创建一个NSURL 的实例使用字符串:

NSURL *URL = [NSURL URLWithString:[URLString stringByRemovingPercentEncoding]];

您可以使用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

您得到的url,可以通过stringByRemovingPercentEscapesUsingEncoding解码,以删除所有转义序列。

问题是,url依赖于CDATA,这就是为什么它不能正确解码/编码。我使用- (void) parser:(NSXMLParser *)parser foundCDATA:(NSData *)CDATABlock{委托方法,并像这样编码字符串:

NSString *string = [[NSString alloc] initWithData:CDATABlock encoding:NSUTF8StringEncoding];

然后我分配到NSURL没有任何问题。

最新更新