После прочтения всех ответов по этой теме и ( неправильно ) принятого я хочу добавить свой вклад.
ЕСЛИ цель - iOS7 +,и в 2017 году это должно произойти, поскольку XCode делает действительно трудным предоставление совместимости под iOS8, лучший способ, поточно-безопасный, быстрый, amd будет полностью поддерживать UTF-8, чтобы сделать это:
(код Objective C)
@implementation NSString (NSString_urlencoding)
- (NSString *)urlencode {
static NSMutableCharacterSet *chars = nil;
static dispatch_once_t pred;
if (chars)
return [self stringByAddingPercentEncodingWithAllowedCharacters:chars];
// to be thread safe
dispatch_once(&pred, ^{
chars = NSCharacterSet.URLQueryAllowedCharacterSet.mutableCopy;
[chars removeCharactersInString:@"!*'();:@&=+$,/?%#[]"];
});
return [self stringByAddingPercentEncodingWithAllowedCharacters:chars];
}
@end
Это расширит NSString, исключит запрещенные RFC-символы, поддержит символы UTF-8 и позволит вам использовать такие вещи, как:
NSString *myusername = "I'm[evil]&want(to)break!!!$->àéìòù";
NSLog(@"Source: %@ -> Dest: %@", myusername, [myusername urlencode]);
, которые будут напечатаны на вашей консоли отладки:
Источник: я [злой] и хочу (чтобы) сломаться !!! $ -> аи -> Dest: I% 27m% 5Bevil% 5D% 26want% 28to% 29break% 21% 21% 21% 24-% 3E% C3% A0% C3% A9% C3% AC% C3% B2% C3% B9
... обратите внимание также на использование dispatch_once, чтобы избежать многократных инициализаций в многопоточных средах.