StringByAddingPercentEscapes无法使用&符号,问号等

时间:2011-08-16 10:03:16

标签: iphone objective-c nsurl

我正在从我的iphone应用程序发送请求,其中一些参数是用户可以输入文本框的文本。因此,我需要对它们进行HTML编码。

以下是我遇到的问题:

NSLog(@"%@", testText); // Test & ?
testText = [testText stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSLog(@"%@", testText); // Test%20&%20?

正如您所看到的,只有空格被编码,使得服务器忽略了参数的&符号之外的所有内容。

这是stringByAddingPercentEscapes的广告行为吗?我是否必须使用相应的十六进制代码手动替换每个特殊字符?

感谢任何贡献。

1 个答案:

答案 0 :(得分:1)

它们未被编码,因为它们是有效的URL字符 stringByAddingPercentEscapesUsingEncoding:的文档说

  

有关更复杂的转换,请参阅CFURLCreateStringByAddingPercentEscapes。

我使用以下方法编码我的查询字符串参数(添加到NSString类别)

- (NSString *)urlEncodedString {
    CFStringRef buffer = CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault,
                                                                 (CFStringRef)self,
                                                                 NULL,
                                                                 CFSTR("!*'();:@&=+$,/?%#[]"),
                                                                 kCFStringEncodingUTF8);
    NSString *result = [NSString stringWithString:(NSString *)buffer];
    CFRelease(buffer);

    return result;
}