前言
最近項(xiàng)目中碰到服務(wù)器返回的內(nèi)容里有html文本問(wèn)題,這樣的文本是無(wú)法直接顯示的滋捶,所以就得去想辦法如何處理html文本逆日,只顯示自己想要的文字。然后發(fā)現(xiàn)網(wǎng)上各種各樣的博客奠滑,有點(diǎn)亂,在這里自己給自己遇到的問(wèn)題在做個(gè)總結(jié)丹皱,方便以后自己看
正文
第一種處理方式:
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文本,直接就可以顯示純文本了宋税,如果文本內(nèi)容比較多,用這個(gè)方法處理會(huì)明顯卡頓.不過(guò)處理效果沒(méi)的說(shuō),賊棒摊崭!
第二種處理方式:
NSRegularExpression *regularExpretion=[NSRegularExpression regularExpressionWithPattern:@"<[^>]*>|\n|&nbsq |\r|&mdash|&ldquo|&rdquo"
options:0
error:nil];
//正則去掉html標(biāo)簽
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;
第二種方式是正則表達(dá)式處理,這個(gè)就比較麻煩了,需要你知道正則表達(dá)式應(yīng)該怎么去寫杰赛,你的html里面有哪些標(biāo)簽需要去除,通常下面這個(gè)是去除所有標(biāo)簽,但是不包括換行,空格,一些html的標(biāo)點(diǎn)符號(hào)
//string regexstr = @"<[^>]*>";? ? //去除所有的標(biāo)簽
這里的一段有包括了換行呢簸,空格和一些標(biāo)點(diǎn)符號(hào)標(biāo)簽
@"<[^>]*>|\n|&nbsq |\r|&mdash|&ldquo|&rdquo"
這里還有一些其他的正則表達(dá)式
//@"<script[^>]*?>.*?</script>" //去除所有腳本,中間部分也刪除
// string regexstr = @"<img[^>]*>";? //去除圖片的正則
// string regexstr = @"<(?!br).*?>";? //去除所有標(biāo)簽,只剩br
// string regexstr = @"<table[^>]*?>.*?</table>";? //去除table里面的所有內(nèi)容
//string regexstr = @"<(?!img|br|p|/p).*?>";? //去除所有標(biāo)簽根时,只剩img,br,p
兩種效果比較明顯發(fā)現(xiàn)第一種效果好瘦赫,但是第二種處理不卡頓。
總結(jié)
我的想法是我把html截取一部分用第一種方法蛤迎,這樣可以達(dá)到既不卡頓又效果好??