Für iOS sollte der folgende Code für numerische Codes funktionieren. Es sollte relativ einfach sein, die gerne von &
zu erweitern ...
-(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;
}
Einige Unit-Test-Code ...
-(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);
}
ich das gleiche tat ... aber gibt es eine eingebaute Möglichkeit zu Mach das ... – nbojja
@nbojja Wie viel mehr gebaut willst du? Wenn Sie daran interessiert sind, fügen Sie eine Methode, die dies als eine Kategorie in NSString tut und dann eingebaut ist. – Abizern
@Abizern: Viele Sprachen haben eingebaute Methoden zum Enkodieren und Dekodieren von HTML-Entitäten, Obj-C fehlt diese und viele andere Dinge, die Programmierer seit 2002 für selbstverständlich halten. Suchen und Ersetzen ist ein schlechter Ersatz, weil man ziemlich lange brauchen wird, um zu wissen, dass man alle Entitäten bekommt. –