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("´", "'") 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
Langage du code : VB.NET (vbnet)
Voir tous les articles de la catégorie Programmation
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.