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

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

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."
  

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

Voir tous les articles de la catégorie Programmation

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

    1. 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 🙂

  1. 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.

Les commentaires sont fermés.

commodo velit, elit. eget venenatis tristique dolor et, adipiscing mi, dapibus Retour haut de page