NSString Обратная косая черта, выходящая - PullRequest
3 голосов
/ 28 мая 2010

Я работаю над приложением для iPhone OS, которое отправляет xml-запрос в веб-службу. Чтобы отправить запрос, xml добавляется в строку NSString. При этом у меня возникли некоторые проблемы с кавычками " и обратной косой чертой \ в файле XML, которые требуют экранирования. Есть ли полный список символов, которые нужно экранировать?

Кроме того, существует ли приемлемый способ сделать это экранирование (т.е. заменить \ на \\ и " на \") или это сам случай создания метода?

Спасибо

Ответы [ 2 ]

5 голосов
/ 09 июля 2010
NSString *escapedString = [unescapedString stringByReplacingOccurrencesOfString:@"\\" withString:@"\\\\"];
escapedString = [escapedString stringByReplacingOccurrencesOfString:@"\"" withString:@"\\\""];

Не полностью отвечает на ваш вопрос, но похоже, что это может помочь со второй частью ...

1 голос
/ 20 марта 2013

Вы можете использовать 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];
    }
}
...