前言
最近项目中碰到服务器返回的内容里有html文本问题,这样的文本是无法直接显示的,所以就得去想办法如何处理html文本,只显示自己想要的文字。然后发现网上各种各样的博客,有点乱,在这里自己给自己遇到的问题在做个总结,方便以后自己看
正文
第一种处理方式:
NSString* htmlString =@" Some html string \n This is some text! ";
NSAttributedString* attrStr = [[NSAttributedStringalloc]initWithData:[htmlStringdataUsingEncoding:NSUnicodeStringEncoding]options:
@{NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType }documentAttributes:nilerror:nil];
UILabel* myLabel = [[UILabelalloc]initWithFrame:self.view.bounds];
myLabel.attributedText= attrStr;
[self.viewaddSubview:myLabel];
这里是label显示html文本,直接就可以显示纯文本了,如果文本内容比较多,用这个方法处理会明显卡顿.不过处理效果没的说,贼棒!
第二种处理方式:
NSRegularExpression *regularExpretion=[NSRegularExpression regularExpressionWithPattern:@"<[^>]*>|\n|&nbsq |\r|&mdash|&ldquo|&rdquo"
options:0
error:nil];
//正则去掉html标签
NSString *string =[regularExpretion stringByReplacingMatchesInString:text options:NSMatchingReportProgress range:NSMakeRange(0, text.length) withTemplate:@""];
string = [string stringByReplacingOccurrencesOfString:@" " withString:@""]; //去掉空格
string = [string stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]; //去除字符串中所有得空格及控制字符
self.contentLabel.text = string;
第二种方式是正则表达式处理,这个就比较麻烦了,需要你知道正则表达式应该怎么去写,你的html里面有哪些标签需要去除,通常下面这个是去除所有标签,但是不包括换行,空格,一些html的标点符号
//string regexstr = @"<[^>]*>"; //去除所有的标签
这里的一段有包括了换行,空格和一些标点符号标签
@"<[^>]*>|\n|&nbsq |\r|&mdash|&ldquo|&rdquo"
这里还有一些其他的正则表达式
//@"<script[^>]*?>.*?</script>" //去除所有脚本,中间部分也删除
// string regexstr = @"<img[^>]*>"; //去除图片的正则
// string regexstr = @"<(?!br).*?>"; //去除所有标签,只剩br
// string regexstr = @"<table[^>]*?>.*?</table>"; //去除table里面的所有内容
//string regexstr = @"<(?!img|br|p|/p).*?>"; //去除所有标签,只剩img,br,p
两种效果比较明显发现第一种效果好,但是第二种处理不卡顿。
总结
我的想法是我把html截取一部分用第一种方法,这样可以达到既不卡顿又效果好😄