Удалить HTML-теги из NSString на iPhone - PullRequest
104 голосов
/ 10 ноября 2008

Существует несколько способов удаления HTML tags из NSString в Cocoa.

Один из способов - преобразовать строку в NSAttributedString, а затем получить обработанный текст.

Другой способ - использовать метод NSXMLDocument's - objectByApplyingXSLTString для применения преобразования XSLT, которое это делает.

К сожалению, iPhone не поддерживает NSAttributedString или NSXMLDocument. Слишком много крайних случаев и искаженных документов HTML, чтобы я чувствовал себя комфортно, используя регулярные выражения или NSScanner. У кого-нибудь есть решение этого?

Одним из предложений было просто искать открывающие и закрывающие символы тега, этот метод не будет работать, за исключением очень тривиальных случаев.

Например, в этих случаях (из главы Perl Cookbook на ту же тему) этот метод будет нарушен:

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

<!-- <A comment> -->

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

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

Ответы [ 22 ]

0 голосов
/ 05 октября 2017

Обновленный ответ для @ m.kocikowski, который работает в последних версиях iOS.

-(NSString *) stringByStrippingHTMLFromString:(NSString *)str {
NSRange range;
while ((range = [str rangeOfString:@"<[^>]+>" options:NSRegularExpressionSearch]).location != NSNotFound)
    str = [str stringByReplacingCharactersInRange:range withString:@""];
return str;

}

0 голосов
/ 26 июля 2013

Расширяя это больше от ответов m.kocikowski и Dan J с дополнительным объяснением для новичков

1 # Сначала вам нужно создать jective-c-категории , чтобы код можно было использовать в любом классе.

.h

@interface NSString (NAME_OF_CATEGORY)

- (NSString *)stringByStrippingHTML;

@end

.m

@implementation NSString (NAME_OF_CATEGORY)

- (NSString *)stringByStrippingHTML
{
NSMutableString *outString;
NSString *inputString = self;

if (inputString)
{
    outString = [[NSMutableString alloc] initWithString:inputString];

    if ([inputString length] > 0)
    {
        NSRange r;

        while ((r = [outString rangeOfString:@"<[^>]+>" options:NSRegularExpressionSearch]).location != NSNotFound)
        {
            [outString deleteCharactersInRange:r];
        }
    }
}

return outString;
}

@end

2 # Затем просто импортируйте файл .h класса категории, который вы только что создали, например,

#import "NSString+NAME_OF_CATEGORY.h"

3 # Вызов метода.

NSString* sub = [result stringByStrippingHTML];
NSLog(@"%@", sub);

результат - это NSString, с которого я хочу убрать теги.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...