Escape Quotes dans Objective-C

J'utilise cet extrait de code pour coder les caractères afin qu'ils soient compatibles avec une requête POST:

NSSsortingng *unescaped = [textField text]; NSSsortingng *escapedSsortingng = (__bridge_transfer NSSsortingng *)CFURLCreateSsortingngByAddingPercentEscapes( NULL, (__bridge_retained CFSsortingngRef)unescaped, NULL, (CFSsortingngRef)@"!*'();:@&=+$,/?%#[]", kCFSsortingngEncodingUTF8); 

Ce qui fonctionne bien, mais n'ajoute pas d'échappement Citation: "

Comment puis-je échapper des guillemets dans IOS?

Je pense que je n'ai pas bien posé la question.

J'avais besoin de prendre l'user NSSsortingng entré de [textField text] et m'assurer que s'il y a des guillemets dans la string, ils sont échappés correctement afin d'envoyer à travers une instruction POST.

Ma solution était:

 unescaped = [unescaped ssortingngByReplacingOccurrencesOfSsortingng:@"\"" withSsortingng:@"\\\""]; 

Merci

Premièrement, vous ne voulez pas utiliser __bridge_retained dans votre dissortingbution vers un CFSsortingngRef . Utilisez juste __bridge .

Deuxièmement, vous n'avez pas besoin d'échapper manuellement les guillemets par rlocation de string. Ajoutez simplement le caractère de citation à l'set de caractères à être cité lors de l'appel de CFURLCreateSsortingngByAddingPercentEscapes() . Ainsi:

 NSSsortingng *unescaped = [textField text]; NSSsortingng *escapedSsortingng = CFBridgingRelease(CFURLCreateSsortingngByAddingPercentEscapes(NULL, (__bridge CFSsortingngRef)unescaped, NULL, CFSTR("!*'();:@&=+$,/?%#[]\""), kCFSsortingngEncodingUTF8)); 

(En plus d'append la citation à l'set, j'ai changé pour utiliser CFBridgingRelease() plutôt que pour un __bridge_transfer parce que je le trouve plus clair: il satisfait le sentiment que toutes les fonctions CF "Create" ont besoin d'une "Release" correspondante. a changé l'utilisation d'un cast littéral @"" en CFSsortingngRef en juste un CFSTR("") .)

Les citations doivent être échappées avec \" .

Un péché:

 (CFSsortingngRef)@"I'm an \"example\"" 

essayez d'utiliser \ "au lieu d'utiliser" directement …

Des caractères spéciaux comme des citations, des barres obliques et d'autres nécessitent \ pour que ce caractère supprime sa fonctionnalité spéciale.