【问题标题】:Sending encoded XML to a server from iPhone从 iPhone 向服务器发送编码的 XML
【发布时间】:2012-03-17 11:39:23
【问题描述】:

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

[string stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

但是我在记录字符串时注意到 & 符号没有转义?我想应该是吧?我测试过的空格、引号和哈希符号都可以编码,但不是 & 符号?

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

谢谢。

【问题讨论】:

    标签: iphone xml encode


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      请注意,您应该只对通过 URL 参数发送到服务器的字符执行此操作。如果您实际上是通过将 XML 内容放入请求的 HTTP 正文中将 XML 数据 POST 到服务中,则不需要这种编码。根据要发布的 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。在这种情况下,我对我的 XML 内容使用 UTF 编码,这可能是您在所有情况下都应该使用的编码,除非您有特定的理由不这样做。

      【讨论】:

      • 嗨@Tim Dean,感谢您的回答。是的,我在 HTTP 正文中发布了这个,如果我通过这种机制发送它,我需要做什么样的编码?
      • 我会使用 NSUTF8StringEncoding,除非您有特定原因说明您的服务需要其他方式。用我如何做到这一点的示例更新了我的帖子。
      猜你喜欢
      • 2011-01-05
      • 1970-01-01
      • 2018-06-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-29
      相关资源
      最近更新 更多