Метод NSString для процента экранирования '&' для URL - PullRequest
10 голосов
/ 29 января 2010

Какой метод кодирования NSString в процентах будет правильно экранировать символ амперсанда ( & ) в %26?

stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding

получает пробелы (% 20) и другие злодеи, но игнорирует амперсанды!?!

Ответы [ 3 ]

43 голосов
/ 29 января 2010

Амперсанды не будут обрабатываться этим методом, поскольку они являются допустимыми символами в URL. Возможно, вам следует предварительно обработать особенно проблемные фрагменты, по частям, до этого вызова.

23 голосов
/ 03 мая 2011

Вот хорошее решение этой проблемы, взятое из блога Bagonca для URL-кодирования ваших строк NSS:

+ (NSString *)urlEncodeValue:(NSString *)str
{
   NSString *result = (NSString *)CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, (CFStringRef)str, NULL, CFSTR(":/?#[]@!$&’()*+,;="), kCFStringEncodingUTF8);
   return [result autorelease];
}

Добавить CFBridgingRelease( для совместимости с ARC.

+ (NSString *)urlEncodeValue:(NSString *)str
{
    NSString *result = (NSString *)CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(kCFAllocatorDefault, (CFStringRef)str, NULL, CFSTR(":/?#[]@!$&’()*+,;="), kCFStringEncodingUTF8));
    return result;
}
8 голосов
/ 23 июня 2011

Принятый ответ не совсем правильный. Я не думаю, что вам нужно обработать строку после вызова addPercentEscapesAndReplaceAmpersand

+ (NSString *) addPercentEscapesAndReplaceAmpersand: (NSString *) stringToEncode
{
    NSString *encodedString = [stringToEncode stringByAddingPercentEscapesUsingEncoding: NSUTF8StringEncoding]; 
    return [encodedString stringByReplacingOccurrencesOfString: @"&" withString: @"%26"];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...