Pour iOS, le code suivant devrait fonctionner pour les codes numériques. Il devrait être relativement facile d'étendre aux goûts de &
...
-(NSString*)unescapeHtmlCodes:(NSString*)input {
NSRange rangeOfHTMLEntity = [input rangeOfString:@"&#"];
if(NSNotFound == rangeOfHTMLEntity.location) {
return input;
}
NSMutableString* answer = [[NSMutableString alloc] init];
[answer autorelease];
NSScanner* scanner = [NSScanner scannerWithString:input];
[scanner setCharactersToBeSkipped:nil]; // we want all white-space
while(![scanner isAtEnd]) {
NSString* fragment;
[scanner scanUpToString:@"&#" intoString:&fragment];
if(nil != fragment) { // e.g. '& B'
[answer appendString:fragment];
}
if(![scanner isAtEnd]) { // implicitly we scanned to the next '&#'
int scanLocation = (int)[scanner scanLocation];
[scanner setScanLocation:scanLocation+2]; // skip over '&#'
int htmlCode;
if([scanner scanInt:&htmlCode]) {
char c = htmlCode;
[answer appendFormat:@"%c", c];
scanLocation = (int)[scanner scanLocation];
[scanner setScanLocation:scanLocation+1]; // skip over ';'
} else {
// err ?
}
}
}
return answer;
}
Une partie du code de test d'unité ...
-(void)testUnescapeHtmlCodes {
NSString* expected = @"A & B";
NSString* actual = [self unescapeHtmlCodes:@"A & B"];
STAssertTrue([expected isEqualToString:actual], @"actual = %@", actual);
expected = @"& B";
actual = [self unescapeHtmlCodes:@"& B"];
STAssertTrue([expected isEqualToString:actual], @"actual = %@", actual);
expected = @"A &";
actual = [self unescapeHtmlCodes:@"A &"];
STAssertTrue([expected isEqualToString:actual], @"actual = %@", actual);
}
je fait la même chose ... mais est-il possible de builtin faites ceci ... – nbojja
@nbojja Combien de plus construit voulez-vous? Si vous êtes concerné, ajoutez une méthode qui fait cela en tant que catégorie sur NSString, puis elle est intégrée. – Abizern
@Abizern: Beaucoup de langages ont des méthodes intégrées pour encoder et décoder les entités HTML, Obj-C en manque et beaucoup d'autres Les choses que les programmeurs tiennent pour acquises depuis 2002. La recherche et le remplacement sont un mauvais substitut, parce que vous devrez passer un certain temps à savoir que vous obtenez toutes les entités. –