1. ホーム
  2. iphone

Objective C HTML escape/unescape

2023-12-05 17:54:10

質問

Objective Cで簡単なHTMLエスケープ/アネスケープを行う簡単な方法があるかどうか疑問に思っています。私が欲しいのはこのような疑似的なコードです。

NSString *string = @"<span>Foo</span>";
[string stringByUnescapingHTML];

を返す

<span>Foo</span>

うまくいけば、他のすべてのHTMLエンティティも、そしてӒなどのASCIIコードもアンエスケープされます。

Cocoa Touch/UIKitにこれを行うためのメソッドはあるのでしょうか?

どのように解決するのですか?

これは リンク には、以下のような解決策が書かれています。Cocoa CFにはCFXMLCreateStringByUnescapingEntities関数がありますが、iPhoneでは使用できません。

@interface MREntitiesConverter : NSObject <NSXMLParserDelegate>{
    NSMutableString* resultString;
}

@property (nonatomic, retain) NSMutableString* resultString;

- (NSString*)convertEntitiesInString:(NSString*)s;

@end


@implementation MREntitiesConverter

@synthesize resultString;

- (id)init
{
    if([super init]) {
        resultString = [[NSMutableString alloc] init];
    }
    return self;
}

- (void)parser:(NSXMLParser *)parser foundCharacters:(NSString *)s {
        [self.resultString appendString:s];
}

- (NSString*)convertEntitiesInString:(NSString*)s {
    if (!s) {
        NSLog(@"ERROR : Parameter string is nil");
    }
    NSString* xmlStr = [NSString stringWithFormat:@"<d>%@</d>", s];
    NSData *data = [xmlStr dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:YES];
    NSXMLParser* xmlParse = [[[NSXMLParser alloc] initWithData:data] autorelease];
    [xmlParse setDelegate:self];
    [xmlParse parse];
    return [NSString stringWithFormat:@"%@",resultString];
}

- (void)dealloc {
    [resultString release];
    [super dealloc];
}

@end