【问题标题】:Check if NSString is HTML string on non-HTML?检查 NSString 是否是非 HTML 上的 HTML 字符串?
【发布时间】:2015-12-08 00:01:31
【问题描述】:

我正在使用 UITextView 在屏幕上显示文本。我还想在同一个 TextView 中显示 HTML 文本。我想要的是,当字符串包含任何 HTML 数据时,它应该根据 HTML 格式化程序显示,否则 textview 应该使用我定义的字体。

这是我用来在 textview 中显示 HTML 文本的代码:

NSString *htmlString = promotion.content;
NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithData:[htmlString dataUsingEncoding:NSUnicodeStringEncoding] options:@{ NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType } documentAttributes:nil error:nil];     
self.promotionTextView.attributedText = attributedString;

我只想检查我在 htmlString 中收到的字符串是否包含任何 html 数据。 我该怎么做?

【问题讨论】:

  • HTML 格式是否正确?展示一个你可以期待的例子。 HTML 中的哪些内容可以保证存在?
  • 其实html没有特定的格式,文本中的任何标签都会被认为是html
  • 也许比较长度:if ([[htmlString dataUsingEncoding:NSUnicodeStringEncoding] length] == [attributedString length]){//No Tags HTML have been interpreted}
  • 不,实际上附加在属性字符串末尾的属性会改变它的大小。所以长度总是不同的
  • 任何标签的正则表达式,但是如果有一个“标签喜欢”的文本,你会得到一个误报

标签: ios objective-c nsstring nsattributedstring nsmutablestring


【解决方案1】:

我会查找 html 开始/结束标签并获取它们之间的子字符串,如下所示:

- (NSString *)htmlFromString:(NSString *)string
{
    NSString *htmlString = nil;

    if([string rangeOfString:@"<html>"].location != NSNotFound && [string rangeOfString:@"</html>"].location != NSNotFound) {

        NSRange firstRange = [string rangeOfString:@"<html>"];
        NSRange secondRange = [string rangeOfString:@"</html>"];

        if(firstRange.location < secondRange.location) {

            NSRange htmlRange = NSMakeRange(firstRange.location, secondRange.location + secondRange.length);
            htmlString = [string substringWithRange:htmlRange];
        }

    }

    return htmlString;
}

我没有尝试过,但它认为它应该可以工作。

【讨论】:

  • 实际上可能字符串只包含一个 标签或一个

    标签。字符串是否是格式正确的 HTML 字符串并不重要。
  • 嗯我知道你的意思...很难知道,因为 html 是简单的标签,你不知道它们什么时候开始或结束,没有任何标记......
  • 您可以使用正则表达式来匹配 html 文本,此链接可能很有用 haacked.com/archive/2004/10/25/…,然后将正则扩展名应用于您的 NSString,如下所示 stackoverflow.com/questions/9661690/…
猜你喜欢
  • 1970-01-01
  • 2013-03-05
  • 1970-01-01
  • 2014-02-09
  • 2017-10-30
  • 1970-01-01
  • 1970-01-01
  • 2011-11-10
  • 2016-12-17
相关资源
最近更新 更多