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
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
.
// 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 / )
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)
Swift 2:
extension String {
func uriDecodedString() -> String? {
return self.stringByReplacingOccurrencesOfString("+", withString: " ").stringByRemovingPercentEncoding
}
}
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