CFURLCreateStringByAddingPercentEscapes返回NULL

时间:2012-05-08 11:27:03

标签: iphone objective-c ios

我遇到了一个类别方法问题,用于百分之百逃避非法符号。

这是我用于任务的代码:

@implementation NSString (URLEncoding)
-(NSString *)urlEncodeUsingEncoding:(NSStringEncoding)encoding {
    NSString *s = (NSString *)CFURLCreateStringByAddingPercentEscapes(NULL, (CFStringRef)self, NULL, (CFStringRef)@"!*'\"();:@&=+$,/?%#[]% ",CFStringConvertNSStringEncodingToEncoding(encoding));
    NSLog(@"S: %@, Self: %@", s, self);
    return [s autorelease];
}
@end

当我在没有上述匹配字符串中找到的任何符号的字符串上运行此方法时,该方法运行正常,并将相同的字符串返回给我。

例如,如果我有一个像@"test"这样的字符串,它将输出:

  

S:测试,自我:测试

但如果我使用像@"test&symbols"这样的字符串,它将输出:

  

S:null,Self:test& symbols

因此,使用CFURLCreateStringByAddingPercentEscapes似乎有些问题。

现在我想要转义符号,例如&因为它们可以出现在用作查询字符串中的值的字符串中,这会导致查询字符串被误解。

有什么想法可以解决这个问题吗?

提前谢谢! / Magnus

1 个答案:

答案 0 :(得分:2)

找出我的大错误。
我被告知要回答这个问题。

我做错了,我没有将NSStringEncoding值传递给方法,例如NSUTF8StringEncoding,而是我传递了一个CF值,例如kCFStringEncodingUTF8

该值通过转换器传递,使其成为导致错误的CF值,并且它已经具有正确的类型。

很抱歉给您带来不便。

-Magnus