2011-05-29 12 views
5

Duplicar posible:
Remove HTML Tags from an NSString on the iPhoneFranja de formularios de etiquetas HTML, etc de NSString

Me gustaría saber el mejor método para despojar a todo el HTML/Javascript, etc etiquetas a partir de una NSString.

La solución actual que estoy usando hojas comentarios y otras etiquetas en, ¿cuál sería la mejor manera de eliminarlos?

Sé de soluciones por ejemplo LibXML, pero me gustaría tener algunos ejemplos para trabajar.

solución actual:

- (NSString *)flattenHTML:(NSString *)html trimWhiteSpace:(BOOL)trim { 

    NSScanner *theScanner; 
    NSString *text = nil; 

    theScanner = [NSScanner scannerWithString:html]; 

    while ([theScanner isAtEnd] == NO) { 

     // find start of tag 
     [theScanner scanUpToString:@"<" intoString:NULL] ;     
     // find end of tag   
     [theScanner scanUpToString:@">" intoString:&text] ; 

     // replace the found tag with a space 
     //(you can filter multi-spaces out later if you wish) 
     html = [html stringByReplacingOccurrencesOfString: 
       [ NSString stringWithFormat:@"%@>", text] 
               withString:@""]; 
    } 

    // trim off whitespace 
    return trim ? [html stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]] : html; 
} 
+0

@ x3ro por lo votan para cerrarla como un duplicado – Mark

+2

@ Marcos lo hizo, ese comentario es añadido automáticamente (para el beneficio del póster) cuando una persona vota para cerrar. – benzado

+0

Hmm la estrecha recuento seguía siendo cero cuando lo vi – Mark

Respuesta

17

probar este método para quitar las etiquetas HTML de una cadena:

- (NSString *)stripTags:(NSString *)str 
{ 
    NSMutableString *html = [NSMutableString stringWithCapacity:[str length]]; 

    NSScanner *scanner = [NSScanner scannerWithString:str]; 
    scanner.charactersToBeSkipped = NULL; 
    NSString *tempText = nil; 

    while (![scanner isAtEnd]) 
    { 
     [scanner scanUpToString:@"<" intoString:&tempText]; 

     if (tempText != nil) 
      [html appendString:tempText]; 

     [scanner scanUpToString:@">" intoString:NULL]; 

     if (![scanner isAtEnd]) 
      [scanner setScanLocation:[scanner scanLocation] + 1]; 

     tempText = nil; 
    } 

    return html; 
} 
+0

buen trabajo !!!!!!! –

+1

I añadió 'scanner.charactersToBeSkipped = null' para el código de seguridad para evitar encolado palabra como se describe aquí: http://stackoverflow.com/questions/2828737/strange-behaviour-of-nsscanner-on-simple-whitespace-removal –

+0

Okay . Gracias. – Dee

Cuestiones relacionadas