Eliminar etiquetas HTML de un NSString en el iPhone
Hay un par de formas diferentes de eliminar HTML tags
de un NSString
archivo Cocoa
.
Una forma es representar la cadena en un NSAttributedString
y luego tomar el texto renderizado.
Otra forma es utilizar NSXMLDocument's
- objectByApplyingXSLTString
método para aplicar una XSLT
transformación que lo haga.
Lamentablemente, el iPhone no es compatible NSAttributedString
con o NSXMLDocument
. Hay demasiados casos extremos y HTML
documentos 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 [ >>>>>>>>>>>> ]]>
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.
Esta NSString
categoría utiliza para NSXMLParser
eliminar con precisión cualquier HTML
etiqueta de un archivo NSString
. Este es un archivo único .m
que .h
se puede incluir fácilmente en su proyecto.
https://gist.github.com/leighmcculloch/1202238
Luego te desnudas html
haciendo 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 HTML
que técnicamente no lo son XML
.
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