J’ai un NSString comme ceci :
mais je veux le transformer à :
Comment est-ce que je peux faire cela ?
J’ai un NSString comme ceci :
mais je veux le transformer à :
Comment est-ce que je peux faire cela ?
Pour échapper les caractères que vous voulez, c'est un peu plus de travail.
Exemple de code (iOS7 et ci-dessus):
NSString *unescaped = @"http://www";
NSString *escapedString = [unescaped stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLHostAllowedCharacterSet]];
NSLog(@"escapedString: %@", escapedString);
NSLog de sortie:
escapedString: http%3A%2F%2Fwww
Les éléments suivants sont utiles codage d'URL jeux de caractères:
URLFragmentAllowedCharacterSet "#%<>[\]^`{|}
URLHostAllowedCharacterSet "#%/<>?@\^`{|}
URLPasswordAllowedCharacterSet "#%/:<>?@[\]^`{|}
URLPathAllowedCharacterSet "#%;<>?[\]^`{|}
URLQueryAllowedCharacterSet "#%<>[\]^`{|}
URLQueryAllowedCharacterSet "#%<>[\]^`{|}
Pour Swift:
var escapedString = originalString.stringByAddingPercentEncodingWithAllowedCharacters(NSCharacterSet.URLHostAllowedCharacterSet())
Pré iOS7 utilisation de Base de la Fondation
L'aide de Base de la Fondation ARC:
NSString *escapedString = (NSString *)CFBridgingRelease(CFURLCreateStringByAddingPercentEscapes(
NULL,
(__bridge CFStringRef) unescaped,
NULL,
CFSTR("!*'();:@&=+$,/?%#[]\" "),
kCFStringEncodingUTF8));
L'aide de Base de la Fondation, Sans ARC:
NSString *escapedString = (NSString *)CFURLCreateStringByAddingPercentEscapes(
NULL,
(CFStringRef)unescaped,
NULL,
CFSTR("!*'();:@&=+$,/?%#[]\" "),
kCFStringEncodingUTF8);
Remarque: -stringByAddingPercentEscapesUsingEncoding
ne produira pas de l'encodage correct, dans ce cas, il ne codent rien de revenir sur la même chaîne.
stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding
code 14 characrters:
`#%^{}[]|\"<> en plus de l'espace de caractère en pourcentage échappé.
chaîne de test:
" `~!@#$%^&*()_+-={}[]|\\:;\"'<,>.?/AZaz"
encodedString:
"%20%60~!@%23$%25%5E&*()_+-=%7B%7D%5B%5D%7C%5C:;%22'%3C,%3E.?/AZaz"
Remarque: si cet ensemble de caractères répondre à vos besoins, si pas les modifier selon les besoins.
RFC 3986 de caractères nécessitant l'encodage (% ajouté, car il est le codage de caractère de préfixe):
"!#$&'()*+,/:;=?@[]%"
Certains "sans réserve des personnages" sont en outre codé:
"\n\r \"%-.<>\^_`{|}~"
C'est ce qu'on appelle un encodage d'URL . Plus ici
-(NSString *)urlEncodeUsingEncoding:(NSStringEncoding)encoding {
return (NSString *)CFURLCreateStringByAddingPercentEscapes(NULL,
(CFStringRef)self,
NULL,
(CFStringRef)@"!*'\"();:@&=+$,/?%#[]% ",
CFStringConvertNSStringEncodingToEncoding(encoding));
}
Ce n'est pas ma solution. Quelqu'un d'autre a écrit dans stackoverflow mais j'ai oublié comment le faire.
De toute façon cette solution fonctionne "bien". Il gère diacritiques, les caractères chinois, et à peu près rien d'autre.
- (NSString *) URLEncodedString {
NSMutableString * output = [NSMutableString string];
const char * source = [self UTF8String];
int sourceLen = strlen(source);
for (int i = 0; i < sourceLen; ++i) {
const unsigned char thisChar = (const unsigned char)source[i];
if (false && thisChar == ' '){
[output appendString:@"+"];
} else if (thisChar == '.' || thisChar == '-' || thisChar == '_' || thisChar == '~' ||
(thisChar >= 'a' && thisChar <= 'z') ||
(thisChar >= 'A' && thisChar <= 'Z') ||
(thisChar >= '0' && thisChar <= '9')) {
[output appendFormat:@"%c", thisChar];
} else {
[output appendFormat:@"%%%02X", thisChar];
}
}
return output;
}
Si quelqu'un pourrait me dire qui a écrit ce code, je vais vraiment l'apprécier. Fondamentalement, il a une certaine explication de cette chaîne codée décoder exactement comme il le souhaite.
J'ai modifié sa solution un peu. J'aime l'espace pour être représenté avec des %20 plutôt que de +. C'est tout.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.