我正在尝试使用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
这似乎不对,但无论我怎么做都不对
答案 0 :(得分:2)
您的escape
功能正常。问题在于您调用NSLog
:
escape
为您的输入生成字符串kalel%2F%2F%2F%26%26%26%3F%3F%3F
。 NSLog
将此字符串解释为格式字符串,并在kalel
字后立即将一些垃圾作为浮点数打印!
您应该始终使用字符串常量作为第一个参数调用NSLog
,例如:
NSLog(@"%@", [self escape:@"kalel///&&&???"]);
P.S。 escape
中有内存泄漏---当您将保留的CF对象转移到Objective C空间时,您应该return (__bridge_transfer NSString *)
。