2009-11-17 4 views
10

Comment faire pour coder l'URL dans NSURL?Encodage NSURL dans ObjC

Merci

+0

Il est plus facile maintenant avec iOS 7: http://stackoverflow.com/questions/3423545/objective-c-iphone-percent-encode-a-string/20271177 # 20271177 –

Répondre

27

Vous pouvez utiliser stringByAddingPercentEscapesUsingEncoding:

NSString* escapedUrlString = 
    [unescapedString stringByAddingPercentEscapesUsingEncoding: 
         NSUTF8StringEncoding]; 

Cependant, dans mon expérience, cette méthode est pas tout à fait parfaite (dans le traitement de certains caractères réservés), et dans de nombreux cas, je devais utiliser la variante:

NSString * escapedUrlString = 
    (NSString *)CFURLCreateStringByAddingPercentEscapes(
    NULL, 
    (CFStringRef)unescapedString, 
    NULL, 
    (CFStringRef)@"!*'();:@&=+$,/?%#[]", 
    kCFStringEncodingUTF8); 
+3

+1, mais avec un rappel que 'CFURLCreateStringByAddingPercentEscapes' renvoie une chaîne avec un nombre de retenue de +1, vous devez donc la 'libérer' lorsque vous avez terminé. –

+0

Vous avez sauvé ma journée @notnoop –

3

Cela a fonctionné pour moi:

NSString *response = [NSString stringWithContentsOfURL:[NSURL URLWithString:[url stringByAddingPercentEscapesUsingEncoding:STRING_ENCODING_IN_THE_SERVER]] 
                 encoding:STRING_ENCODING_IN_THE_SERVER 
                 error:&error];