Отправка закодированного XML на сервер с iPhone - PullRequest
0 голосов
/ 28 февраля 2012

Я связываюсь между приложением iPhone и сервером, используя XML. Чтобы обойти проблему ввода пользователем любого символа, который может нарушить XML, прежде чем я отправлю его на сервер, я использую метод NSString:

[string stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

Но я заметил при записи в журнал строки, что символ & не экранирован? Я думал, что это должно быть? пробелы, кавычки и символы хеша, которые я тестировал для всех, хорошо кодируют, но не амперсанды?

Какие наиболее распространенные методы используются для кодирования / декодирования XML, отправляемого / получаемого с сервера?

Спасибо.

Ответы [ 2 ]

1 голос
/ 28 февраля 2012

Ответ, предоставленный @sleepy, является хорошим подходом, или если вы предпочитаете синтаксис реализации этого в категории, см. эту ссылку для примера.

Обратите внимание, что вам нужноделать это только для символов, которые вы отправляете на сервер через параметры URL.Если вы на самом деле отправляете данные XML в службу, помещая содержимое XML в тело HTTP вашего запроса, то этот вид кодирования не требуется.В зависимости от размера публикуемого 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 - это строка NSSt, содержащая XML, который я хочу опубликовать, а serviceURL - это NSURL для URL-адреса службы.В этом случае я использую кодировку UTF для своего содержимого XML, что вам, вероятно, следует использовать во всех случаях, если у вас нет особых причин не делать этого.

1 голос
/ 28 февраля 2012

Я полагаю, вы размещаете данные.Вы можете использовать следующую функцию для экранирования данных XML:

+(NSString *)urlEncode:(NSString *)str {
    return (NSString *)CFURLCreateStringByAddingPercentEscapes(NULL,
                  (CFStringRef)str,
                  NULL,
                  (CFStringRef)@"!*'\"();:@&=+$,/?%#[]% ",
                  CFStringConvertNSStringEncodingToEncoding(NSUTF8StringEncoding));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...