Eliminar etiquetas HTML de un NSString en el iPhone

Resuelto lfalin asked hace 54 años • 22 respuestas

Hay un par de formas diferentes de eliminar HTML tagsde un NSStringarchivo Cocoa.

Una forma es representar la cadena en un NSAttributedStringy luego tomar el texto renderizado.

Otra forma es utilizar NSXMLDocument's- objectByApplyingXSLTStringmétodo para aplicar una XSLTtransformación que lo haga.

Lamentablemente, el iPhone no es compatible NSAttributedStringcon o NSXMLDocument. Hay demasiados casos extremos y HTMLdocumentos con formato incorrecto como para que me sienta cómodo usando expresiones regulares o NSScanner. ¿Alguien tiene una solución a esto?

Una sugerencia ha sido simplemente buscar caracteres de etiqueta de apertura y cierre; este método no funcionará excepto en casos muy triviales.

Por ejemplo, estos casos (del capítulo del Libro de cocina de Perl sobre el mismo tema) romperían este método:

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

<!-- <A comment> -->

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

<![INCLUDE CDATA [ >>>>>>>>>>>> ]]>
lfalin avatar Jan 01 '70 08:01 lfalin
Aceptado

Una solución rápida y "sucia" (elimina todo entre < y >), funciona con 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;
}

Tengo esto declarado como una categoría de NSString.

m.kocikowski avatar Feb 03 '2011 13:02 m.kocikowski

Esta NSStringcategoría utiliza para NSXMLParsereliminar con precisión cualquier HTMLetiqueta de un archivo NSString. Este es un archivo único .mque .hse puede incluir fácilmente en su proyecto.

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

Luego te desnudas htmlhaciendo lo siguiente:

Importar el encabezado:

#import "NSString_stripHtml.h"

Y luego llama a stripHtml:

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

Esto también funciona con archivos mal formados HTMLque técnicamente no lo son XML.

Leigh McCulloch avatar Sep 08 '2011 00:09 Leigh McCulloch
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];

funciona bien para mi

MANCHIKANTI KRISHNAKISHORE avatar Jun 13 '2013 07:06 MANCHIKANTI KRISHNAKISHORE