Article publié en 2012 : certaines informations techniques peuvent avoir évolué depuis.
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("´", "'")
sResult = sResult.Replace("à", "à")
sResult = sResult.Replace("À", "À")
sResult = sResult.Replace("á", "á")
sResult = sResult.Replace("Á", "Á")
sResult = sResult.Replace("â", "â")
sResult = sResult.Replace("Â", "Â")
sResult = sResult.Replace("ã", "ã")
sResult = sResult.Replace("Ã", "Ã")
sResult = sResult.Replace("ä", "ä")
sResult = sResult.Replace("Ä", "Ä")
sResult = sResult.Replace("å", "å")
sResult = sResult.Replace("Å", "Å")
sResult = sResult.Replace("æ", "æ")
sResult = sResult.Replace("Æ", "Æ")
sResult = sResult.Replace("è", "è")
sResult = sResult.Replace("È", "È")
sResult = sResult.Replace("é", "é")
sResult = sResult.Replace("É", "É")
sResult = sResult.Replace("ê", "ê")
sResult = sResult.Replace("Ê", "Ê")
sResult = sResult.Replace("ë", "ë")
sResult = sResult.Replace("Ë", "Ë")
sResult = sResult.Replace("ì", "ì")
sResult = sResult.Replace("Ì", "Ì")
sResult = sResult.Replace("í", "í")
sResult = sResult.Replace("Í", "Í")
sResult = sResult.Replace("î", "î")
sResult = sResult.Replace("Î", "Î")
sResult = sResult.Replace("ï", "ï")
sResult = sResult.Replace("Ï", "Ï")
sResult = sResult.Replace("ò", "ò")
sResult = sResult.Replace("Ò", "Ò")
sResult = sResult.Replace("ó", "ó")
sResult = sResult.Replace("Ó", "Ó")
sResult = sResult.Replace("ô", "ô")
sResult = sResult.Replace("Ô", "Ô")
sResult = sResult.Replace("õ", "õ")
sResult = sResult.Replace("Õ", "Õ")
sResult = sResult.Replace("ö", "ö")
sResult = sResult.Replace("Ö", "Ö")
sResult = sResult.Replace("ø", "ø")
sResult = sResult.Replace("Ø", "Ø")
sResult = sResult.Replace("ù", "ù")
sResult = sResult.Replace("Ù", "Ù")
sResult = sResult.Replace("ú", "ú")
sResult = sResult.Replace("Ú", "Ú")
sResult = sResult.Replace("û", "û")
sResult = sResult.Replace("Û", "Û")
sResult = sResult.Replace("ü", "ü")
sResult = sResult.Replace("Ü", "Ü")
sResult = sResult.Replace("ñ", "ñ")
sResult = sResult.Replace("Ñ", "Ñ")
sResult = sResult.Replace("ç", "ç")
sResult = sResult.Replace("Ç", "Ç")
sResult = sResult.Replace("ý", "ý")
sResult = sResult.Replace("Ý", "Ý")
sResult = sResult.Replace("ß", "ß")
sResult = sResult.Replace("«", "«")
sResult = sResult.Replace("»", "»")
sResult = sResult.Replace("&", "&")
sResult = sResult.Replace("<", "<")
sResult = sResult.Replace(">", "<")
sResult = sResult.Replace(""", """")
sResult = sResult.Replace("¶", "§")
sResult = sResult.Replace("©", "©")
sResult = sResult.Replace(" ", " ")
End If
Return sResult
End Function
Voir tous les articles de la catégorie Programmation

3 commentaires
Concrètement, tu t’en sers pour faire quoi exactement ?
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 🙂
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.