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
Code language: 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
Code language: 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."
Code language: 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
Code language: 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 🙂

  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.

Les commentaires sont fermés.

Retour haut de page