108 votes

Supprimer les balises HTML d'une chaîne NSString sur l'iPhone

Il ya un couple de différentes manières pour supprimer les balises HTML à partir d'un NSString dans le Cacao.

Une façon est de rendre la chaîne dans un NSAttributedString et puis saisir le texte rendu.

Une autre façon est d'utiliser NSXMLDocument-objectByApplyingXSLTString méthode pour appliquer une transformation XSLT qui le fait.

Malheureusement, l'iPhone ne supporte pas NSAttributedString ou NSXMLDocument. Il y a aussi de nombreux cas de bord et mal formé des documents HTML pour que je me sente à l'aise en utilisant les regex ou NSScanner. Quelqu'un aurait-il une solution à cela?

Il a été suggéré de simplement regarder pour l'ouverture et la balise de fermeture de caractères, cette méthode ne fonctionnera pas sauf pour les cas triviaux.

Par exemple, ces cas (à partir de Perl livre de recettes chapitre sur le même sujet) serait briser cette méthode:

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

<!-- <A comment> -->

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

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

313voto

m.kocikowski Points 2414

Une solution rapide et "sale" (supprime tout entre <et>), fonctionne avec 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;
}
 

J'ai cette déclaré en tant que catégorie os NSString.

30voto

Leigh McCulloch Points 377

Cette NSString catégorie utilise le NSXMLParser avec précision supprimer toutes les balises HTML à partir d'un NSString. C'est une seule .m et .h fichier qui peut être inclus dans votre projet facilement.

http://blog.mcchouse.com/2011/09/ios-dev-strip-html-tags-from-nsstring.html

Vous dépouillez html de la manière suivante:

L'importation de l'en-tête:

#import "NSString_stripHtml.h"

Et puis d'appeler stripHtml:

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

Cela fonctionne aussi avec du code HTML mal formé qui techniquement n'est pas XML.

11voto

 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];
 

c'est bon pour moi

8voto

black1987 Points 70

utilisez ceci

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

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

N'oubliez pas d'inclure ceci dans votre code: #import "RegexKitLite.h", voici le lien pour télécharger cette API: http://regexkit.sourceforge.net/#Downloads

7voto

Colin Barrett Points 3581

Jetez un coup d'œil à NSXMLParser. C'est un analyseur de style SAX. Vous devriez pouvoir l'utiliser pour détecter des balises ou d'autres éléments indésirables dans le document XML et les ignorer, en capturant uniquement du texte pur.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X