Notez également que vous pouvez utiliser la -stringByAddingPercentEscapesUsingEncodingméthode de NSString .
Mike Weller du
2
Ah oui, maintenant je me souviens du stringByAddingPercentEscapesUsingEncodingcomportement funky . Il n'encode que «&» et «=» ou quelque chose de ridicule comme ça.
Mike Weller
2
Selon la RFC1738, vous devrez également encoder des caractères supplémentaires. Donc, bien que cela réponde à la question de l'OP, son utilité est limitée en tant qu'encodeur d'URL à usage général. Par exemple, il ne gère pas les éléments non alphanumériques tels qu'un tréma allemand.
Alex Nauda
3
Cela ne fonctionne pas (pour la partie iOS 7). Cela ne convertit pas & en% 26.
coolcool1994
1
Créez le jeu de caractères dont vous avez besoin à partir d'un NSStringavec characterSetWithCharactersInString, prenez l'inverse avec invertedSetet utilisez-le avec stringByAddingPercentEncodingWithAllowedCharacters. Pour un exemple, voir cette réponse SO .
Si quelqu'un me disait qui a écrit ce code, je l'apprécierais vraiment. En gros, il a une explication sur la raison pour laquelle cette chaîne encodée décodera exactement comme il le souhaite.
J'ai un peu modifié sa solution. J'aime que l'espace soit représenté avec% 20 plutôt que +. C'est tout.
@yuchaozh c'est une fonction que vous mettez dans une catégorie de NSString. Ainsi, self est NSStirng et [self UTF8String] renvoie, en supposant, sa chaîne au format UTF8.
release encodedString et url. ce code concerne le paramètre d'encodage. Pour encoder toute la chaîne de transmission d'adresse au lieu de "paramètre".
Zahi
Cela a fonctionné pour moi ... encodé même le caractère & avec lequel j'avais des problèmes.
Виктор Иванов
3
Cela peut fonctionner dans Objective C ARC.Utilisez CFBridgingRelease pour convertir un objet de style Core Foundation en objet Objective-C et transférer la propriété de l'objet à ARC .Voir la fonction CFBridgingRelease ici.
Voici ce que j'utilise. Notez que vous devez utiliser la @autoreleasepoolfonctionnalité ou le programme pourrait planter ou bloquer l'EDI. J'ai dû redémarrer mon IDE trois fois jusqu'à ce que je réalise le correctif. Il semble que ce code soit conforme à l'ARC.
Cette question a été posée à plusieurs reprises et de nombreuses réponses ont été données, mais malheureusement toutes celles sélectionnées (et quelques autres suggérées) sont fausses.
Voici la chaîne de test que j'ai utilisée: This is my 123+ test & test2. Got it?!
Google l'implémente dans sa boîte à outils Google pour Mac . C'est donc un bon endroit pour savoir comment ils le font. Une autre option consiste à inclure la boîte à outils et à utiliser leur implémentation.
Découvrez la mise en œuvre ici . (Ce qui revient exactement à ce que les gens ont publié ici).
ùÕ9y^VêÏÊEØ®.ú/V÷ÅÖêú2Èh~
- aucune des solutions ci-dessous ne semble résoudre ce problème!Réponses:
Pour échapper aux personnages que vous voulez, c'est un peu plus de travail.
Exemple de code
Sortie NSLog:
Voici des jeux de caractères de codage d'URL utiles:
Création d'un jeu de caractères combinant tout ce qui précède:
Créer un Base64
Dans le cas d'un jeu de caractères Base64:
Remarque:
stringByAddingPercentEncodingWithAllowedCharacters
encodera également les caractères UTF-8 nécessitant un encodage.Utilisation de Core Foundation sans ARC:
Remarque:
-stringByAddingPercentEscapesUsingEncoding
ne produira pas l'encodage correct, dans ce cas, il n'encodera rien retournant la même chaîne.stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding
encode 14 caractères:testString:
encodedString:
Remarque: considérez si cet ensemble de caractères répond à vos besoins, sinon modifiez-les si nécessaire.
Caractères RFC 3986 nécessitant un encodage (% ajouté car il s'agit du caractère de préfixe d'encodage):
Certains "caractères non réservés" sont en outre codés:
la source
-stringByAddingPercentEscapesUsingEncoding
méthode de NSString .stringByAddingPercentEscapesUsingEncoding
comportement funky . Il n'encode que «&» et «=» ou quelque chose de ridicule comme ça.NSString
aveccharacterSetWithCharactersInString
, prenez l'inverse avecinvertedSet
et utilisez-le avecstringByAddingPercentEncodingWithAllowedCharacters
. Pour un exemple, voir cette réponse SO .C'est ce qu'on appelle le codage d'URL . Plus ici .
la source
CFURLCreateStringByAddingPercentEscapes()
est obsolète. Utilisez[NSString stringByAddingPercentEncodingWithAllowedCharacters:]
plutôt.Ce n'est pas ma solution. Quelqu'un d'autre a écrit dans stackoverflow mais j'ai oublié comment.
D'une manière ou d'une autre, cette solution fonctionne "bien". Il gère les caractères diacritiques, chinois et à peu près tout le reste.
Si quelqu'un me disait qui a écrit ce code, je l'apprécierais vraiment. En gros, il a une explication sur la raison pour laquelle cette chaîne encodée décodera exactement comme il le souhaite.
J'ai un peu modifié sa solution. J'aime que l'espace soit représenté avec% 20 plutôt que +. C'est tout.
la source
la source
Cela peut fonctionner dans Objective C ARC.Utilisez CFBridgingRelease pour convertir un objet de style Core Foundation en objet Objective-C et transférer la propriété de l'objet à ARC .Voir la fonction CFBridgingRelease ici.
la source
Swift iOS:
Juste pour information: j'ai utilisé ceci:
la source
Vous devrez vous libérer ou
str
vous autoriser .la source
Voici ce que j'utilise. Notez que vous devez utiliser la
@autoreleasepool
fonctionnalité ou le programme pourrait planter ou bloquer l'EDI. J'ai dû redémarrer mon IDE trois fois jusqu'à ce que je réalise le correctif. Il semble que ce code soit conforme à l'ARC.Cette question a été posée à plusieurs reprises et de nombreuses réponses ont été données, mais malheureusement toutes celles sélectionnées (et quelques autres suggérées) sont fausses.
Voici la chaîne de test que j'ai utilisée:
This is my 123+ test & test2. Got it?!
Voici mes méthodes de classe Objective C ++:
la source
Google l'implémente dans sa boîte à outils Google pour Mac . C'est donc un bon endroit pour savoir comment ils le font. Une autre option consiste à inclure la boîte à outils et à utiliser leur implémentation.
Découvrez la mise en œuvre ici . (Ce qui revient exactement à ce que les gens ont publié ici).
la source
C'est ainsi que je fais cela rapidement.
la source
// utilise la méthode d'instance NSString comme ceci:
rappelez-vous, vous ne devez encoder ou décoder que la valeur de votre paramètre, pas toutes les URL que vous demandez.
la source
la source