Problème conversion NSString vers NSURL
Bonjour,
Toujours sur ma p'tite appli avec un p'tit problème de conversion string to url
Dès qu'une url contient le char "&", ça bug au niveau d'apache (serveur http intégré à osx).
NSString *path = [NSString stringWithFormat:@"%@%@",[representedObject valueForKey:@"itemImage"], @"/cover.jpg"];
NSString *web = [path stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLHostAllowedCharacterSet]];
NSString* stringURL = [NSString stringWithFormat:@"http://192.168.25.1/.get_cover.php?width=300&height=300&quality=85&image=/%@", web];
NSURL* url = [NSURL URLWithString:stringURL];
Lors de la conversion string to url chaque "/" est remplacé par %2F, jusqu'ici pas de problème mais pas moyen de substituer "&" en %26.
Si je substitue le "&" à la main sur le serveur ça bug avec les %2F... que je dois repasser en "/" pour que ça passe
Y'a un moyen de manipuler directement la chaine NSURL ? parce qu'évidemment, si je le fais sur le string en essayant de tricher
ça marche pas
NSErrorFailingURLStringKey=http://192.168.25.1/.get_cover.php?width=300&height=300&quality=85&image=/Rock/The Mamas & The Papas/04 - The Papas & The Mamas/cover.jpg
Réponses
Utilise la classe
NSURLComponents
et plus particulièrement sa propriétéqueryItems
qui te permet de spécifier tout ça sans t'emmêler les pinceaux avec des strings.Je te laisse consulter la documentation pour bien comprendre.
URLHostAllowedCharacterSet conserve les "&".
Peut être faudrait-il choisir URLQueryAllowedCharacterSet et créer une instance NSMutableCharacterSet basé sur URLQueryAllowedCharacterSet et retirer le caractère "&" (removeCharactersInString).
Il faut ensuite utiliser stringByAddingPercentEncodingWithAllowedCharacters mais uniquement sur la chaine contenant le nom de l'image (ainsi les & seront encodés) - comme tu le fais dans ton code - et pas sur la chaine query complète.
Évite d'utiliser
valueForKey:
, préfèresobjectForKey:
, ou la shorthand écriture, via des subcripts:representedObject[@"itemImage"]
. Parce qu'en fonction de si c'est un array notamment ou un dictionnaire, le résultat pourrait te surprendre. Pour éviter de faire cette erreur en débutant, je conseille vivement d'utiliser donc leobjectForKey:
.Sinon, je conseille également les
NSURLComponents
.Mouais, rien n'y fait...
Ca a fini en "CFURLCreateStringByAddingPercentEscapes", Xcode me dit que c'est mal et que je doit utiliser stringByAddingPercentEncodingWithAllowedCharacters mais vu qu'il est pas fichu de faire le boulot correctement il continuera à râler
Merci pour toutes vos infos bien utile.