2009-11-17 18 views
10

Come eseguire la codifica URL in NSURL?Codifica NSURL in ObjC

Grazie

+0

E 'più facile ora con iOS 7: http://stackoverflow.com/questions/3423545/objective-c-iphone-percent-encode-a-string/20271177 # 20271177 –

risposta

27

È possibile utilizzare stringByAddingPercentEscapesUsingEncoding:

NSString* escapedUrlString = 
    [unescapedString stringByAddingPercentEscapesUsingEncoding: 
         NSUTF8StringEncoding]; 

Tuttavia, nella mia esperienza, questo metodo non è perfetto (nella gestione di alcuni caratteri riservati), e in molti casi avevo bisogno di usare la variante:

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

+1, ma con un promemoria che "CFURLCreateStringByAddingPercentEscapes" restituisce una stringa con un conteggio di mantenimento +1, quindi è necessario "rilasciarlo" quando hai finito. –

+0

Hai salvato la mia giornata @notnoop –

6

stringByAddingPercentEscapesUsingEncoding: abbia qualche 0.123..

In congiunzione utilizzo lo gtm_stringByEscapingForURLArgument da Google Toolbox for Mac per gli argomenti URL.

3

questo ha funzionato per me:

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