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.