Цель C HTML escape / unescape - PullRequest
       68

Цель C HTML escape / unescape

73 голосов
/ 18 марта 2009

Интересно, есть ли простой способ сделать простой escape / unescape HTML в Objective C. Я хочу что-то вроде этого кода psuedo:

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

Который возвращает

<span>Foo</span>

Надеемся, что удалит все остальные HTML-сущности и даже ASCII-коды, такие как Ӓ и тому подобное.

Есть ли в Cocoa Touch / UIKit какие-либо методы для этого?

Ответы [ 14 ]

0 голосов
/ 26 февраля 2014

Если вам нужно сгенерировать литерал, вы можете использовать такой инструмент:

http://www.freeformatter.com/java-dotnet-escape.html#ad-output

чтобы выполнить работу за вас.

См. Также этот ответ .

0 голосов
/ 08 сентября 2013

Это старый ответ, который я опубликовал несколько лет назад. Мое намерение было не для того, чтобы обеспечить «хорошее» и «респектабельное» решение, а для «хакерского» это может быть полезно при некоторых обстоятельствах. Пожалуйста, не используйте это решение, если больше ничего не работает.

На самом деле, он отлично работает во многих ситуациях, когда другие ответы не, потому что UIWebView делает всю работу. И вы можете даже внедрить некоторый JavaScript (который может быть опасным и / или полезным). Производительность должна быть ужасной, но на самом деле все не так плохо.

Есть еще одно решение, которое следует упомянуть. Просто создайте UIWebView, загрузите закодированную строку и получите текст обратно. Он экранирует теги «<>», а также декодирует все html-сущности (например, «& gt;») и может работать там, где другие этого не делают (например, используя кириллицу). Я не думаю, что это лучшее решение, но оно может быть полезно, если вышеуказанные решения не работают.

Вот небольшой пример использования ARC:

@interface YourClass() <UIWebViewDelegate>

    @property UIWebView *webView;

@end

@implementation YourClass 

- (void)someMethodWhereYouGetTheHtmlString:(NSString *)htmlString {
    self.webView = [[UIWebView alloc] init];
    NSString *htmlString = [NSString stringWithFormat:@"<html><body>%@</body></html>", self.description];
    [self.webView loadHTMLString:htmlString baseURL:nil];
    self.webView.delegate = self;
}

- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error {
    self.webView = nil;
}

- (void)webViewDidFinishLoad:(UIWebView *)webView {
    self.webView = nil;
    NSString *escapedString = [self.webView stringByEvaluatingJavaScriptFromString:@"document.body.textContent;"];
}

- (void)webViewDidStartLoad:(UIWebView *)webView {
    // Do Nothing
}

@end
0 голосов
/ 18 февраля 2011

Почему бы просто не использовать?

NSData *data = [s dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:YES];
NSString *result = [[[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding] autorelease];
return result;

Вопрос Noob, но в моем случае это работает ...

0 голосов
/ 21 сентября 2009

MREntitiesConverter не работает для экранирования искаженного XML. Сбой на простом URL:

http://www.google.com/search?client=safari&rls=en&q=fail&ie=UTF-8&oe=UTF-8

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...