Как удалить тег html из этого [дубликата]

Я отвечу ужасным, нарисованным рукой комиком. Второе изображение является причиной того, что result является undefined в вашем примере кода.

103
задан Dharmesh Kheni 19 December 2014 в 08:31
поделиться

23 ответа

306
ответ дан dlinsin 31 August 2018 в 13:27
поделиться

Swift Version @ m.kocikowski Ответ:

extension String {

    func isEmptyHTMLContent() -> Bool {
        var r = Range(self.startIndex..<self.endIndex)
        var str = self.copy() as! String
        while let range = str.range(of: "<[^>]+>", options: .regularExpression) {
            r = range
            str = str.replacingCharacters(in: r, with: "")
        }

        str = str.trimmingCharacters(in: NSCharacterSet.whitespacesAndNewlines)
        return str.isEmpty
    }
}

P.S: Это работает для меня

0
ответ дан Abhishek Thapliyal 31 August 2018 в 13:27
поделиться

Обновленный ответ для @ 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
ответ дан Ahmed Awad 31 August 2018 в 13:27
поделиться

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

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

.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 в класс категории, (g7)

result - это NSString. Я хочу удалить теги из

#import "NSString+NAME_OF_CATEGORY.h"

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

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

g8]

0
ответ дан Ashoor 31 August 2018 в 13:27
поделиться

Я бы предположил, что самый безопасный способ - просто разобрать для & lt;> s, no? Прокрутите всю строку и скопируйте все, что не заключено в & lt;> s, в новую строку.

2
ответ дан Ben Gottlieb 31 August 2018 в 13:27
поделиться

Взгляните на NSXMLParser. Это парсер SAX-стиля. Вы должны иметь возможность использовать его для обнаружения тегов или других нежелательных элементов в документе XML и игнорировать их, захватывая только чистый текст.

7
ответ дан Colin Barrett 31 August 2018 в 13:27
поделиться

Эта категория NSString использует NSXMLParser для точного удаления любых тегов HTML с NSString. Это один файл .m и .h, который может быть легко включен в ваш проект.

https://gist.github.com/leighmcculloch/1202238

Затем вы разделите html, выполнив следующее:

Импортируйте заголовок:

#import "NSString_stripHtml.h"

И затем вызовите stripHtml:

NSString* mystring = @"<b>Hello</b> World!!";
NSString* stripped = [mystring stripHtml];
// stripped will be = Hello World!!

Это также работает с искаженным HTML, который технически не является XML.

29
ответ дан Community 31 August 2018 в 13:27
поделиться

Я расширил ответ m.kocikowski и попытался сделать его более эффективным, используя NSMutableString. Я также структурировал его для использования в статическом классе Utils (я знаю, что Категория, вероятно, лучший дизайн), и удалила авторекламу, поэтому она компилируется в проекте ARC.

Включается здесь, если кто-то находит это полезным.

.h

+ (NSString *)stringByStrippingHTML:(NSString *)inputString;

.m

+ (NSString *)stringByStrippingHTML:(NSString *)inputString 
{
  NSMutableString *outString;

  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; 
}
3
ответ дан Dan J 31 August 2018 в 13:27
поделиться

Это модернизация ответа m.kocikowski, который удаляет пробелы:

@implementation NSString (StripXMLTags)

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

@end
2
ответ дан digipeople 31 August 2018 в 13:27
поделиться

Если вы хотите получить контент без тэгов html с веб-страницы (HTML-документ), используйте этот код внутри метода делегата UIWebViewDidfinishLoading.

  NSString *myText = [webView stringByEvaluatingJavaScriptFromString:@"document.documentElement.textContent"];
4
ответ дан Hemang 31 August 2018 в 13:27
поделиться
6
ответ дан hpique 31 August 2018 в 13:27
поделиться

Если вы хотите использовать структуру Three20 , у нее есть категория в NSString, которая добавляет метод stringByRemovingHTMLTags. См. NSStringAdditions.h в подпроекте Three20Core.

0
ответ дан jarnoan 31 August 2018 в 13:27
поделиться

Я следую принятому ответу m.kocikowski и модифицировал немного, чтобы использовать autoreleasepool для очистки всех временных строк, которые создаются с помощью stringByReplacingCharactersInRange

. В комментарии к этому методу говорится: , / * Заменить символы в диапазоне указанной строкой, возвращая новую строку. * /

Итак, в зависимости от длины вашего XML вы можете создать огромную кучу новых строк авторекламы, которые не очищаются до конца следующего @autoreleasepool. Если вы не знаете, когда это может произойти, или если действие пользователя может многократно инициировать много вызовов этого метода до этого, вы можете просто обернуть это в @autoreleasepool. Они могут быть даже вложенными и использоваться в пределах петель, где это возможно.

Ссылка Apple на @autoreleasepool заявляет об этом ... «Если вы пишете цикл, который создает много временных объектов, вы можете использовать блок пула автозаполнения внутри цикл, чтобы избавиться от этих объектов до следующей итерации. Использование блока пула автозапуска в цикле помогает уменьшить максимальный объем памяти приложения ». Я не использовал его в цикле, но по крайней мере этот метод теперь очищается после себя.

- (NSString *) stringByStrippingHTML {
    NSString *retVal;
    @autoreleasepool {
        NSRange r;
        NSString *s = [[self copy] autorelease];
        while ((r = [s rangeOfString:@"<[^>]+>" options:NSRegularExpressionSearch]).location != NSNotFound) {
            s = [s stringByReplacingCharactersInRange:r withString:@""];
        }
        retVal = [s copy];
    } 
    // pool is drained, release s and all temp 
    // strings created by stringByReplacingCharactersInRange
    return retVal;
}
0
ответ дан jcpennypincher 31 August 2018 в 13:27
поделиться

используйте этот

NSString *myregex = @"<[^>]*>"; //regex to remove any html tag

NSString *htmlString = @"<html>bla bla</html>";
NSString *stringWithoutHTML = [hstmString stringByReplacingOccurrencesOfRegex:myregex withString:@""];

, не забудьте включить это в свой код: #import «RegexKitLite.h» вот ссылка для загрузки этого API: http: // regexkit .sourceforge.net / # Загрузки

8
ответ дан Johnny 31 August 2018 в 13:27
поделиться

Вот быстрая версия:

func stripHTMLFromString(string: String) -> String {
  var copy = string
  while let range = copy.rangeOfString("<[^>]+>", options: .RegularExpressionSearch) {
    copy = copy.stringByReplacingCharactersInRange(range, withString: "")
  }
  copy = copy.stringByReplacingOccurrencesOfString("&nbsp;", withString: " ")
  copy = copy.stringByReplacingOccurrencesOfString("&amp;", withString: "&")
  return copy
}
0
ответ дан JohnVanDijk 31 August 2018 в 13:27
поделиться
7
ответ дан Kirtikumar A. 31 August 2018 в 13:27
поделиться
UITextView *textview= [[UITextView alloc]initWithFrame:CGRectMake(10, 130, 250, 170)];
NSString *str = @"This is <font color='red'>simple</font>";
[textview setValue:str forKey:@"contentToHTMLString"];
textview.textAlignment = NSTextAlignmentLeft;
textview.editable = NO;
textview.font = [UIFont fontWithName:@"vardana" size:20.0];
[UIView addSubview:textview];

это отлично работает для меня

10
ответ дан MANCHIKANTI KRISHNAKISHORE 31 August 2018 в 13:27
поделиться

Вот сообщение в блоге, в котором обсуждается несколько библиотек, доступных для удаления HTML http://sugarmaplesoftware.com/25/strip-html-tags/ Обратите внимание на комментарии, в которых предлагаются другие решения.

-3
ответ дан micco 31 August 2018 в 13:27
поделиться

Другой способ:

Интерфейс:

-(NSString *) stringByStrippingHTML:(NSString*)inputString;

Реализация

(NSString *) stringByStrippingHTML:(NSString*)inputString
{ 
NSAttributedString *attrString = [[NSAttributedString alloc] initWithData:[inputString dataUsingEncoding:NSUTF8StringEncoding] options:@{NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType,NSCharacterEncodingDocumentAttribute: @(NSUTF8StringEncoding)} documentAttributes:nil error:nil];
NSString *str= [attrString string]; 

//you can add here replacements as your needs:
    [str stringByReplacingOccurrencesOfString:@"[" withString:@""];
    [str stringByReplacingOccurrencesOfString:@"]" withString:@""];
    [str stringByReplacingOccurrencesOfString:@"\n" withString:@""];

    return str;
}

Реализация

cell.exampleClass.text = [self stringByStrippingHTML:[exampleJSONParsingArray valueForKey: @"key"]];

или просто

NSString *myClearStr = [self stringByStrippingHTML:rudeStr];

0
ответ дан Nik Kov 31 August 2018 в 13:27
поделиться
5
ответ дан Rémy Bourgoin 31 August 2018 в 13:27
поделиться
NSAttributedString *str=[[NSAttributedString alloc] initWithData:[trimmedString dataUsingEncoding:NSUTF8StringEncoding] options:@{NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType, NSCharacterEncodingDocumentAttribute: [NSNumber numberWithInt:NSUTF8StringEncoding]} documentAttributes:nil error:nil];
4
ответ дан Robert 31 August 2018 в 13:27
поделиться
#import "RegexKitLite.h"

string text = [html stringByReplacingOccurrencesOfRegex:@"<[^>]+>" withString:@""]
4
ответ дан sra 31 August 2018 в 13:27
поделиться

ниже - принятый ответ, но вместо категории это простой вспомогательный метод со строкой, переданной в него. (спасибо м.коциковски)

-(NSString *) stringByStrippingHTML:(NSString*)originalString {
    NSRange r;
    NSString *s = [originalString copy];
    while ((r = [s rangeOfString:@"<[^>]+>" options:NSRegularExpressionSearch]).location != NSNotFound)
        s = [s stringByReplacingCharactersInRange:r withString:@""];
    return s;
}
1
ответ дан tmr 31 August 2018 в 13:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: