检查NSString是否是一个html字符串?

时间:2016-03-10 10:08:17

标签: html ios objective-c nsattributedstring nsmutableattributedstring

我正在创建一个应该显示字符串列表的应用程序,该字符串是从服务器返回的,可以是html,也可以不是。 我目前正在UILabel中设置文本。这样做我使用下面的

    NSMutableAttributedString *attributedTitleString = [[NSMutableAttributedString alloc] initWithData:[title dataUsingEncoding:NSUnicodeStringEncoding] options:@{ NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType } documentAttributes:nil error:nil];
cell.label.attributedText =attributedTitleString;

当文本是html时,由于字体和对齐在html中返回,所以一切都很完美。当文本是普通文本时,会出现此问题。字体,文本对齐,文本大小等不再受到尊重。

那么如何检查文本是否为html字符串? 在正常文本的情况下,我将使用以下内容:

cell.label.text =title;

我曾尝试在论坛上搜索,但仍然没有得到任何答案。

3 个答案:

答案 0 :(得分:2)

这很好,你需要把:

cell.label. attributedText = title;也包括普通文本。

因为工作正常。运行以下代码。

//如果是HTML文字

NSString *htmlstr = `@"This is <font color='red'>simple</font>"`;

NSMutableAttributedString *attributedTitleString = [[NSMutableAttributedString alloc] initWithData:[htmlstr dataUsingEncoding:NSUnicodeStringEncoding] options:@{ NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType } documentAttributes:nil error:nil];

textField.attributedText =attributedTitleString;

textField.font = [UIFont fontWithName:@"vardana" size:20.0];

//如果是普通文字。

NSString *normalStr = @"This is Renuka";

NSMutableAttributedString *NorAttributedTitleString = [[NSMutableAttributedString alloc] initWithData:[normalStr dataUsingEncoding:NSUnicodeStringEncoding] options:@{ NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType } documentAttributes:nil error:nil];

textField.attributedText = NorAttributedTitleString;

textField.font = [UIFont fontWithName:@"vardana" size:20.0];

答案 1 :(得分:1)

您可以检查您的字符串是否包含html标记:

// iOS8 +

NSString *string = @"<TAG>bla bla bla html</TAG>";

if ([string containsString:@"<TAG"]) {
    NSLog(@"html string");
} else {
    NSLog(@"no html string");
}

// iOS7 +

NSString *string = @"<TAG>bla bla bla html</TAG>";

if ([string rangeOfString:@"<TAG"].location != NSNotFound) {
    NSLog(@"html string");
} else {
    NSLog(@"no html string");
}

答案 2 :(得分:0)

由于HTML和XML的语法和结构非常相似,因此可以使用XMLDocument来检查给定的数据对象是HTML还是纯文本。

因此,数据来自Data类型,并由URLSession dataTask返回。

// Default to plain text
var options : [NSAttributedString.DocumentReadingOptionKey: Any] = [.documentType: NSAttributedString.DocumentType.plain]

// This will succeed for HTML, but not for plain text                
if let _ = try? XMLDocument(data: data, options: []) {
     options[.documentType] = NSAttributedString.DocumentType.html
}

guard let string = try? NSAttributedString(data: data, options: options, documentAttributes: nil) else { return }

更新

以上方法适用于。我遇到一些HTML无法创建XML文档的麻烦。目前,我有一个非常不喜欢的解决方案。 因为症状是属性字符串中只返回一行,所以只需检查一下,如果只有一行,则创建一个新的属性字符串。

var options : [NSAttributedString.DocumentReadingOptionKey: Any] = [.documentType: NSAttributedString.DocumentType.html]

guard var string = try? NSAttributedString(data: data, options: options, documentAttributes: nil) else { return }

if string.string.split(separator: "\n").count == 1 {
    options[.documentType] = NSAttributedString.DocumentType.plain
    guard let tempString = try? NSAttributedString(data: data, options: options, documentAttributes: nil) else { return }
    string = tempString
}