ios - 从 iPhone 上的 NSString 中删除 HTML 标签

标签 ios objective-c iphone cocoa-touch nsstring

有几种不同的方法可以从 Cocoa 中的 NSString 中删除 HTML 标记

One way就是将字符串渲染成一个NSAttributedString,然后抓取渲染出来的文本。

Another way是使用 NSXMLDocument's -objectByApplyingXSLTString 方法来应用 XSLT 转换。

很遗憾,iPhone 不支持 NSAttributedStringNSXMLDocument。有太多的边缘情况和格式错误的 HTML 文档让我觉得使用 regex 或 NSScanner 很舒服。有没有人可以解决这个问题?

一个建议是简单地查找开始和结束标记字符,除了非常琐碎的情况外,这种方法将不起作用。

例如,这些案例(来自 Perl Cookbook 关于同一主题的章节)会破坏此方法:

<IMG SRC = "foo.gif" ALT = "A > B">

<!-- <A comment> -->

<script>if (a<b && a>c)</script>

<![INCLUDE CDATA [ >>>>>>>>>>>> ]]>

最佳答案

一种快速且“脏”(删除 < 和 > 之间的所有内容)的解决方案,适用于 iOS >= 3.2:

-(NSString *) stringByStrippingHTML {
  NSRange r;
  NSString *s = [[self copy] autorelease];
  while ((r = [s rangeOfString:@"<[^>]+>" options:NSRegularExpressionSearch]).location != NSNotFound)
    s = [s stringByReplacingCharactersInRange:r withString:@""];
  return s;
}

我已将其声明为 os NSString 类别。

关于ios - 从 iPhone 上的 NSString 中删除 HTML 标签,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/277055/

相关文章:

ios - 如何在 UICollectionView 中添加 Load more cell?

objective-c - 在 Cocoa touch 之前学习 Cocoa?

iphone - 事件指示器在 NSURL 调用之前启动动画

iphone - 交叉溶解可以在 iPhone 上运行,但不能在 iPad 上运行

ios - 更改 View 时 UIScrollView 停止工作

ios - 错误表达式类型 '@lvalue String?' 在没有更多上下文的情况下不明确

ios - Xcode 单元测试返回没有 'private keyword' 的临时文件夹的 NSURL

ios - 需要使用 CallKit 在 iOS 10 中调用详细信息

objective-c - QuartzCore 不绘制圆角半径

iphone - iOS 版 OpenGL ES 1.0 中的单位如何设置?