从iPhone发送编码的XML到服务器

时间:2012-02-28 00:17:38

标签: iphone xml encode

我正在使用XML在iPhone应用程序和服务器之间进行通信。为了解决用户在将其发送到服务器之前输入可能破坏XML的任何字符的问题,我使用的是NSString方法:

[string stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

但是我注意到在记录字符串时记录&符号没有逃脱?我以为应该是这样的?我测试过的空格,引号和哈希符号编码都很好而不是&符号吗?

用于编码/解码发送到服务器/从服务器接收的XML的最常用方法是什么?

感谢。

2 个答案:

答案 0 :(得分:1)

我假设您正在发布数据。您可以使用以下函数来转义XML数据:

+(NSString *)urlEncode:(NSString *)str {
    return (NSString *)CFURLCreateStringByAddingPercentEscapes(NULL,
                  (CFStringRef)str,
                  NULL,
                  (CFStringRef)@"!*'\"();:@&=+$,/?%#[]% ",
                  CFStringConvertNSStringEncodingToEncoding(NSUTF8StringEncoding));
}

答案 1 :(得分:1)

@sleepy提供的答案是一种很好的方法,或者如果您更喜欢在类别中实现此方法的语法,请参阅this link作为示例。

请注意,您应该只对通过URL参数发送到服务器的字符执行此操作。如果您通过将XML内容放入请求的HTTP正文中来实际将XML数据发布到服务,则不需要这种编码。根据要发布的XML的大小和服务支持的接口,在某些情况下使用HTTP正文可能是更好的选择。

作为如何在HTTP正文中执行此操作的示例,我通常使用以下内容:

NSData *requestData = [requestXml dataUsingEncoding:NSUTF8StringEncoding];
NSString *requestLength = [NSString stringWithFormat:@"%d", [requestXml length]];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:serviceURL];    
[request setHTTPMethod:@"POST"];
[request setValue:@"text/xml" forHTTPHeaderField:@"Content-Type"];
[request setValue:requestLength forHTTPHeaderField:@"Content-Length"];
[request setHTTPBody:requestData];

其中requestXML是包含我要发布的XML的NSString,serviceURL是服务URL的NSURL。在这种情况下,我使用UTF编码来处理我的XML内容,这是你应该在所有情况下使用的,除非你有特殊的理由不这样做。