четверг, 15 августа 2013 г.

Proper URL encoding


При передаче параметров в строке URL в iOS могут возникнуть проблемы с формированием правильной строки адреса  URL. Причиной этого могут быть не правильно закодированные символы в адресе, например пробелы. Чтобы этого избежать необходимо кодировать строку адреса. Закодировать строку которая будет использоваться в качестве URL в iOS очень просто. Для этого достаточно выполнить лишь один метод, который преобразует незакодированную строку в закодированную.

Непосредственно сам метода кодировки
NSString *fullUrlString = [loginUrlString stringByAppendingString:params];
 
NSString *properlyEscapedURL = 
  [fullLoginUrlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

Пример применения метода кодировки
NSString *urlString = @"/rest/resource/method";
 
NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease];
 
[dateFormatter setDateFormat:@"dd.MM.yyyy"];
 
NSDateFormatter *dateFormatterForSecondDate = 
  [[[NSDateFormatter alloc] init] autorelease];
 
[dateFormatterForSecondDate setDateFormat:@"dd.MM.yyyy HH:mm"];
 
NSString *userIdStr = [currentUserIdNumber stringValue];
 
NSString *userIdParam = [@"?userId=" stringByAppendingString:userIdStr];
 
NSString *fromCityParam = [@"&fDispCity=" stringByAppendingString:fromCity];
 
NSString *toCityParam = [@"&fDeliveryCity=" stringByAppendingString:toCity];
 
NSString *fromDateParam = 
  [@"&fDate=" stringByAppendingString:[dateFormatter stringFromDate:fromDate]];
 
NSString *weightParam = [@"&fTruckCategory=" stringByAppendingString:
  [MyEnums getNameForTruckCategory:truckCategory]];
 
NSString *toDateParam = [@"&fDateAlong=" stringByAppendingString:
  [dateFormatterForSecondDate stringFromDate:toDate]];
 
NSMutableString *params = [NSMutableString stringWithString:userIdParam];
[params appendString:fromCityParam];
[params appendString:toCityParam];
[params appendString:fromDateParam];
[params appendString:weightParam];
[params appendString:toDateParam];
 
NSString *fullUrlString = [loginUrlString stringByAppendingString:params];
 
NSString *properlyEscapedURL = 
  [fullLoginUrlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
 
NSURL *url = [NSURL URLWithString:properlyEscapedURL];

Комментариев нет:

Отправить комментарий