我正在从我的iphone应用程序发送请求,其中一些参数是用户可以输入文本框的文本。因此,我需要对它们进行HTML编码。
以下是我遇到的问题:
NSLog(@"%@", testText); // Test & ?
testText = [testText stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
NSLog(@"%@", testText); // Test%20&%20?
正如您所看到的,只有空格被编码,使得服务器忽略了参数的&符号之外的所有内容。
这是stringByAddingPercentEscapes的广告行为吗?我是否必须使用相应的十六进制代码手动替换每个特殊字符?
感谢任何贡献。
答案 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;
}