2012-02-28 4 views
0

XMLを使用してiPhoneアプリとサーバの間で通信しています。私はNSStringのメソッドを使用しているサーバーに送信する前にXMLを壊すかもしれない任意の文字を入力するユーザーの問題を回避するには、次のコード化されたXMLをiPhoneからサーバに送信する

[string stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; 

しかし、文字列のログを行うとき、私は気づきました&シンボルはエスケープされていませんか?私はそれがすべきだと思った?空白、引用符、およびハッシュ記号は、私がすべてのエンコードをテストしましたが、アンパサンドではありません。

サーバーとの間で送受信されるXMLのエンコード/デコードに最も一般的な方法は何ですか?

ありがとうございました。

答えて

1

@sleepyが提供する答えは良い方法である、またはあなたがカテゴリでこれを実現するための構文を好む場合などthis linkを参照してください。

これは、URLパラメータを使用してサーバーに送信する文字の場合にのみ行う必要があることに注意してください。リクエストのHTTP本体にXMLコンテンツを配置して実際にサービスにXMLデータをPOSTしている場合、この種のエンコーディングは必要ありません。転記されるXMLのサイズやサービスでサポートされるインターフェイスの種類によっては、HTTPの本文を使用する方が良い場合もあります。 requestXMLは私が投稿したいとserviceURLがためNSURLであるXMLを含むNSStringのである

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]; 

HTTPボディでこれを行う方法の一例として、私は通常、このようなものを使用しますサービスURL。この場合、XMLコンテンツにUTFエンコーディングを使用しています。これは、特定の理由がない限り、おそらくすべての場合に使用する必要があります。

+0

こんにちは@ティムディーン、あなたの答えに感謝します。はい、これをHTTPの本文に投稿していますが、このメカニズムで送信する場合、どのようなエンコーディングが必要ですか? – bennythemink

+0

あなたのサービスで別途必要な理由がない限り、NSUTF8StringEncodingを使用します。私のポストを、私がこれをどうやって行うのかの例で更新しました。 –

+0

多くのありがとうTim! – bennythemink

1

私はあなたがデータを投稿していると仮定します。あなたは、XMLデータをエスケープするために、以下の機能を使用することができます。

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

多くのおかげで眠い:) – bennythemink

関連する問題