web-dev-qa-db-fra.com

Comment décoder l'URL dans iOS - Objective 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%, à savoir le caractère +. Est-ce que quelqu'un connaît 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 la sortie:

chemin + avec + espaces

29
VinnyD
NSString *path = [[@"path+with+spaces"
    stringByReplacingOccurrencesOfString:@"+" withString:@" "]
    stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

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

51
rob mayoff
// 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 le moyen préféré parce que ... "Apparemment", c'est un "bug" dont Apple est conscient, mais ils ne l'ont pas encore fait ... ( http: // simonwoodside .com/weblog/2009/4/22/how_to_really_url_encode / )

20
delux247

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

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

(stringByReplacingPercentEscapesUsingEncoding: décode les échappements en pourcentage)

2
Evan Mulawski

Swift 2:

extension String  {

    func uriDecodedString() -> String? {
       return self.stringByReplacingOccurrencesOfString("+", withString: " ").stringByRemovingPercentEncoding
    }

}
1
Mojtabye

Vous pouvez également utiliser la bibliothèque PercentEncoder de Cocoapods.

Swift 4

  • Incluez la bibliothèque dans votre fichier podfile: 

    pod PercentEncoder

  • Importer la bibliothèque PercentEncoder

    import PercentEncoder

    classe ViewController {

    ...

    }

  • Remplacez le caractère "+" par "% 20" et utilisez la méthode "ped_decodeURI"

    "chemin + avec + espaces" .remplaceOccurrences (of: "+", avec: "% 20"). ped_decodeURI ()

Il retournera "chemin avec des espaces"

Voici le lien pour référence: https://cocoapods.org/pods/PercentEncoder

0
Fernando Perez