2012-02-28 68 views
0

我使用XML在iPhone應用程序和服務器之間進行通信。爲了解決用戶的問題,在進入可能會破壞XML的任何字符之前,我把它發送給我使用的NSString方法服務器:從iPhone發送編碼XML到服務器

[string stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; 

但這樣做日誌的String的時候,我注意到&符號不能逃脫?我認爲它應該是?空格,引號和哈希符號,我已經測試了所有編碼好但不是&符號?

用於編碼/解碼發送到/從服務器接收的XML的最常見方法是什麼?

謝謝。

回答

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是包含我要發佈和serviceURL的XML一個NSString對於一個NSURL服務網址。在這種情況下,我爲我的XML內容使用了UTF編碼,這是您應該在所有情況下使用的內容,除非您有特定的理由不這樣做。

+0

嗨@Tim Dean,謝謝你的回答。是的,我在HTTP正文中發佈了這個內容,如果我通過這種機制發送它,我需要做什麼樣的編碼? – bennythemink 2012-02-28 03:39:54

+0

我會使用NSUTF8StringEncoding,除非你有一個特定的原因,否則你的服務要求。以我如何做到這一點的示例更新我的帖子。 – 2012-02-28 03:46:24

+0

非常感謝蒂姆! – bennythemink 2012-02-28 04:01:14

1

我假設你在POST數據。您可以使用下面的函數轉義XML數據:

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

非常感謝昏昏欲睡:) – bennythemink 2012-02-28 04:01:47