3

Web サービスに xml 要求を送信する iPhone OS アプリケーションに取り組んでいます。リクエストを送信するために、xml が NSString に追加されます。これを行っているときに、エスケープが必要な xml ファイルの引用符"とバックスラッシュで問題が発生しました。\エスケープする必要がある文字の完全なリストはありますか?

また、このエスケープを行う受け入れられた方法はありますか (つまり、 と で置き換え\ます\\) "\"それとも自分でメソッドを作成する場合ですか?

ありがとう

4

2 に答える 2

5
NSString *escapedString = [unescapedString stringByReplacingOccurrencesOfString:@"\\" withString:@"\\\\"];
escapedString = [escapedString stringByReplacingOccurrencesOfString:@"\"" withString:@"\\\""];

あなたの質問に完全には答えていませんが、2番目の部分に役立つようです...

于 2010-07-09T15:07:35.110 に答える
1

文字セットから文字をスキャンする NSScanner を使用できます。見つかった場合は、エスケープ\\を新しい文字列に追加し、見つかった特殊文字から次の部分文字列を次の文字までコピーします。

NSString *sourceString = /* Some input String*/;
NSMutableString *destString = [@"" mutableCopy];
NSCharacterSet *escapeCharsSet = [NSCharacterSet characterSetWithCharactersInString:@" ()\\"];

NSScanner *scanner = [NSScanner scannerWithString:sourceString];
while (![scanner isAtEnd]) {
    NSString *tempString;
    [scanner scanUpToCharactersFromSet:escapeCharsSet intoString:&tempString];
    if([scanner isAtEnd]){
        [destString appendString:tempString];
    }
    else {
        [destString appendFormat:@"%@\\%@", tempString, [sourceString substringWithRange:NSMakeRange([scanner scanLocation], 1)]];
        [scanner setScanLocation:[scanner scanLocation]+1];
    }
}
于 2013-03-19T21:49:15.437 に答える