1

我正在尝试使用 ARC 在我的 iOS 5 应用程序中对字符串进行 url 编码。

我就是这样做的:

- (NSString *)escape:(NSString *)text
{
    return (__bridge NSString *)CFURLCreateStringByAddingPercentEscapes(NULL,
                                          (__bridge CFStringRef)text, NULL,
                                          (CFStringRef)@"!*'();:@&=+$,/?%#[]",
                                          kCFStringEncodingUTF8);
}

然后我用这样的测试数据调用它:

NSLog([self escape:@"kalel///&&&???"]);

但我得到的输出NSLog是这样的:

kalel0.0000000.0000000.00000022623F0.0000000.000000

这似乎不正确,但无论如何我都无法正确

4

1 回答 1

2

你的escape功能很好。问题在于您所说的方式NSLog

escape为您的输入生成字符串kalel%2F%2F%2F%26%26%26%3F%3F%3F。将此字符串解释为格式字符串,并在单词NSLog之后将一些垃圾打印为浮点数!kalel

您应该始终NSLog使用字符串常量作为第一个参数进行调用,例如:

NSLog(@"%@", [self escape:@"kalel///&&&???"]);

PS你有一个内存泄漏escape---你应该return (__bridge_transfer NSString *)将保留的CF对象转移到Objective C空间。

于 2012-01-10T20:00:47.853 回答