29 votes

Comment décoder des URL dans iOS - Objectif C

La méthode stringByReplacingPercentEscapesUsingEncoding ne fonctionne pas correctement car elle ne décode pas les symboles spéciaux qui ne commencent pas par un caractère%, c'est-à-dire le caractère +. Quelqu'un connaît-il une meilleure méthode pour le faire dans iOS?

Voici ce que j'utilise actuellement:

 NSString *path = [@"path+with+spaces"
     stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
 

Et voici un exemple de sortie:

chemin + avec + espaces

53voto

rob mayoff Points 124153
 NSString *path = [[@"path+with+spaces"
    stringByReplacingOccurrencesOfString:@"+" withString:@" "]
    stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
 

Notez que la substitution plus pour l'espace n'est utilisée que dans les données application/x-www-form-urlencoded - la partie chaîne de requête d'une URL ou le corps d'une demande POST .

20voto

delux247 Points 1336
 // Decode a percent escape encoded string.
- (NSString*) decodeFromPercentEscapeString:(NSString *) string {
return (__bridge NSString *) CFURLCreateStringByReplacingPercentEscapesUsingEncoding(NULL,
                                                        (__bridge CFStringRef) string,
                                                        CFSTR(""),
                                                        kCFStringEncodingUTF8);
} 
 

http://cybersam.com/ios-dev/proper-url-percent-encoding-in-ios

Cela semble être la voie préférée parce que ... "Apparemment", c'est un "bug" dont Apple a connaissance, mais ils n'ont encore rien fait à ce sujet ... ( http://simonwoodside.com/weblog/2009/4/22/how_to_really_url_encode/ )

2voto

Evan Mulawski Points 28536

Si vous essayez de remplacer le signe plus par des échappements en pourcentage, effectuez un remplacement de chaîne de "+" à "" (espace unique). Utilisez ensuite stringByAddingPercentEscapesUsingEncoding: pour ajouter le pourcentage d'échappement.

Le signe plus est l'un des nombreux caractères d'URL réservés qui n'est jamais codé.

( stringByReplacingPercentEscapesUsingEncoding: décode le pourcentage d'échappement)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X