VB.Net : une fonction StripTags pour nettoyer le HTML

Il n’existe pas de fonction native en VB.Net pour nettoyer un texte des balises HTML qu’il contient, à la manière de la fonction StripTags de PHP. Voici un petit hack pour ce faire, en une ligne de code (ou presque !)

Imports System.Text.RegularExpressions  ''' <summary> ''' Supprime les tags HTML du texte passé en paramètre ''' </summary> ''' <param name="sTexte">Texte à nettoyer</param> ''' <returns></returns> Function StripTags(ByVal sTexte As String) As String      Return Regex.Replace(sTexte, "<.*?>", "")  End Function Langage du code : HTML, XML (xml)

Il ne faut pas oublier l’import en début de code, afin d’assurer la prise en charge des expressions régulières 😉

Si vous désirez que la fonction soit accessible directement derrière une variable de type chaîne, il suffit d’ajouter un attribut System.Runtime.CompilerServices.Extension à votre fonction, afin de la définir comme extension du type String :

Imports System.Text.RegularExpressions  ''' <summary> ''' Supprime les tags HTML du texte passé en paramètre ''' </summary> ''' <param name="sTexte">Texte à nettoyer</param> ''' <returns></returns> <System.Runtime.CompilerServices.Extension> _     Function StripTags(ByVal sTexte As String) As String      Return Regex.Replace(sTexte, "<.*?>", "")  End Function Langage du code : VB.NET (vbnet)

De cette manière, on peut simplement appeler la fonction en ligne, directement sur une variable de type String :

Dim sTexteHTML As String = "<p>Ceci est un texte <strong>en gras</strong>.</p>"  Debug.Print(sTexteHTML.Striptags())  ' Affiche "Ceci est un texte en gras." Langage du code : VB.NET (vbnet)

Il est également possible d’ajouter des options facultatives, afin de filtrer ou non les caractères accentués, ainsi que les balises HTML à éventuellement transformer en sauts de ligne (afin d’obtenir un résultat final propre). Voici notre fonction finale :

Imports System.Text.RegularExpressions  ''' <summary> ''' Supprime les tags HTML du texte passé en paramètre ''' </summary> ''' <param name="sTexte">Texte à nettoyer</param> ''' <param name="bConvertirAccents">Si VRAI, convertit les accents et caractères spéciaux HTML dans leur équivalent classique</param> ''' <param name="bConvertirSautsDeLigne">Si VRAI, convertit les balises HTML qui le doivent en sauts de ligne</param> ''' <returns></returns> <System.Runtime.CompilerServices.Extension> _ Public Function StripTags(sTexte As String, Optional bConvertirAccents As Boolean = False, Optional bConvertirSautsDeLigne As Boolean = False) As String      If bConvertirSautsDeLigne Then         'Remplacement des différentes combinaisons         sTexte = sTexte.Replace("<br>", vbLf)         sTexte = sTexte.Replace("<br />", vbLf)         sTexte = sTexte.Replace("</li>", vbLf)         sTexte = sTexte.Replace("</p>", vbLf)         sTexte = sTexte.Replace("<BR>", vbLf)         sTexte = sTexte.Replace("<BR />", vbLf)         sTexte = sTexte.Replace("</LI>", vbLf)         sTexte = sTexte.Replace("</P>", vbLf)     End If      Dim sResult As String = Regex.Replace(sTexte, "<[^>]+>", "")      If bConvertirAccents Then         sResult = sResult.Replace("&acute;", "'")         sResult = sResult.Replace("&agrave;", "à")         sResult = sResult.Replace("&Agrave;", "À")         sResult = sResult.Replace("&aacute;", "á")         sResult = sResult.Replace("&Aacute;", "Á")         sResult = sResult.Replace("&acirc;", "â")         sResult = sResult.Replace("&Acirc;", "Â")         sResult = sResult.Replace("&atilde;", "ã")         sResult = sResult.Replace("&Atilde;", "Ã")         sResult = sResult.Replace("&auml;", "ä")         sResult = sResult.Replace("&Auml;", "Ä")         sResult = sResult.Replace("&aring;", "å")         sResult = sResult.Replace("&Aring;", "Å")         sResult = sResult.Replace("&aelig;", "æ")         sResult = sResult.Replace("&AElig;", "Æ")         sResult = sResult.Replace("&egrave;", "è")         sResult = sResult.Replace("&Egrave;", "È")         sResult = sResult.Replace("&eacute;", "é")         sResult = sResult.Replace("&Eacute;", "É")         sResult = sResult.Replace("&ecirc;", "ê")         sResult = sResult.Replace("&Ecirc;", "Ê")         sResult = sResult.Replace("&euml;", "ë")         sResult = sResult.Replace("&Euml;", "Ë")         sResult = sResult.Replace("&igrave;", "ì")         sResult = sResult.Replace("&Igrave;", "Ì")         sResult = sResult.Replace("&iacute;", "í")         sResult = sResult.Replace("&Iacute;", "Í")         sResult = sResult.Replace("&icirc;", "î")         sResult = sResult.Replace("&Icirc;", "Î")         sResult = sResult.Replace("&iuml;", "ï")         sResult = sResult.Replace("&Iuml;", "Ï")         sResult = sResult.Replace("&ograve;", "ò")         sResult = sResult.Replace("&Ograve;", "Ò")         sResult = sResult.Replace("&oacute;", "ó")         sResult = sResult.Replace("&Oacute;", "Ó")         sResult = sResult.Replace("&ocirc;", "ô")         sResult = sResult.Replace("&Ocirc;", "Ô")         sResult = sResult.Replace("&otilde;", "õ")         sResult = sResult.Replace("&Otilde;", "Õ")         sResult = sResult.Replace("&ouml;", "ö")         sResult = sResult.Replace("&Ouml;", "Ö")         sResult = sResult.Replace("&oslash;", "ø")         sResult = sResult.Replace("&Oslash;", "Ø")         sResult = sResult.Replace("&ugrave;", "ù")         sResult = sResult.Replace("&Ugrave;", "Ù")         sResult = sResult.Replace("&uacute;", "ú")         sResult = sResult.Replace("&Uacute;", "Ú")         sResult = sResult.Replace("&ucirc;", "û")         sResult = sResult.Replace("&Ucirc;", "Û")         sResult = sResult.Replace("&uuml;", "ü")         sResult = sResult.Replace("&Uuml;", "Ü")         sResult = sResult.Replace("&ntilde;", "ñ")         sResult = sResult.Replace("&Ntilde;", "Ñ")         sResult = sResult.Replace("&ccedil;", "ç")         sResult = sResult.Replace("&Ccedil;", "Ç")         sResult = sResult.Replace("&yacute;", "ý")         sResult = sResult.Replace("&Yacute;", "Ý")         sResult = sResult.Replace("&szlig;", "ß")         sResult = sResult.Replace("&laquo;", "«")         sResult = sResult.Replace("&raquo;", "»")         sResult = sResult.Replace("&amp;", "&")         sResult = sResult.Replace("&lt;", "<")         sResult = sResult.Replace("&gt;", "<")         sResult = sResult.Replace("&quot;", """")         sResult = sResult.Replace("&para;", "§")         sResult = sResult.Replace("&copy;", "©")         sResult = sResult.Replace("&nbsp;", " ")     End If      Return sResult  End Function Langage du code : VB.NET (vbnet)

Voir tous les articles de la catégorie Programmation

3 réflexions sur “VB.Net : une fonction StripTags pour nettoyer le HTML”

    1. Avatar de Cédric GIRARD
      Cédric GIRARD

      Bonjour

      Je m’en sers (par exemple) dans mes petits outils de scrapping / analyse de page web : ça me permet de supprimer d’un coup toutes les balises HTML et d’isoler de ce fait le texte 🙂

      Répondre
  1. Avatar de clemence

    ah oui il fallait y penser, j’avoue quand lisant l’article je voyais pas bien non plus comment on pouvait s’en servir.
    On rentre quand même là dans du très technique, c’est pas à la portée du bricoleur html du dimanche.

    Répondre

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Retour en haut