iOSの場合、次のコードは数値コードで使用できます。私が同じことをやった... &
...
-(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;
}
の同類にいくつかのユニットテストコードを拡張する
-(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);
}
比較的簡単なはず...しかしに任意の組み込み方法はありこれをやろう... – nbojja
@nbojjaどのくらい組み込みたいですか? NSStringのカテゴリとしてこれを行うメソッドを追加してから組み込みます。 – Abizern
@Abizern:多くの言語には、HTMLエンティティのエンコードとデコードのための組み込みメソッドがあり、Obj-Cにはこれと他の多くの機能がありませんプログラマーは2002年以来、当然のことです。検索と置換は、あなたがすべてのエンティティを取得するのにかなりの時間を費やす必要があるため、貧弱な代替物です。 –