如何正确地转义%符号

时间:2012-05-24 04:37:37

标签: ios nsstring nsurl

我无法正确获取字符串网址格式。所需的输出是:

http://gdata.youtube.com/feeds/api/videos?q=corgi&start-index=1&max-results=50&v=2&fields=entry%5Blink/@rel='http://gdata.youtube.com/schemas/2007%23mobile'%5D

这是我开始使用的代码:

NSString *urlRequest = [NSString stringWithFormat:@"http://gdata.youtube.com/feeds/api/videos?q=corgi&start-index=%u&max-results=%u&v=2&fields=entry[link/@rel='http://gdata.youtube.com/schemas/2007%23mobile']", dataStartIndex, dataIncrements];
NSURL *url = [NSURL URLWithString:urlRequest];

它最终在'%23mobile'上乱窜,并使其成为'20072obile'。我尝试在@符号之前使用\但这不起作用。我做错了什么?

奇怪的是,如果我把它分成两部分,它就能正常工作:

NSString *urlRequest = [NSString stringWithFormat:@"http://gdata.youtube.com/feeds/api/videos?q=corgi&start-index=%u&max-results=%u&v=2&fields=entry", dataStartIndex, dataIncrements];

NSURL *url = [NSURL URLWithString:[urlRequest stringByAppendingString:@"[link/@rel='http://gdata.youtube.com/schemas/2007%23mobile']"]];

如果我没有任何参数(dataStartIndex,dataIncrements),它也可以工作。

3 个答案:

答案 0 :(得分:2)

添加额外的%以转义%,因为您提供的字符串是格式字符串,而不是纯字符串。

答案 1 :(得分:2)

您需要使用其他%23转义%,以制作2007%%23mobile。例如:

NSString *urlRequest = [NSString stringWithFormat:@"http://gdata.youtube.com/feeds/api/videos?q=corgi&start-index=%u&max-results=%u&v=2&fields=entry[link/@rel='http://gdata.youtube.com/schemas/2007%%23mobile']", dataStartIndex, dataIncrements];

答案 2 :(得分:2)

您可以使用: -

NSString *string=[@"yourUrlString" stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];