FONCTION POUR RETIRER LES BALISES HTML DANS UN STRING !

cs_loke Messages postés 53 Date d'inscription dimanche 15 septembre 2002 Statut Membre Dernière intervention 22 août 2006 - 15 févr. 2006 à 12:18
lassad_haddaji Messages postés 141 Date d'inscription mardi 24 avril 2007 Statut Membre Dernière intervention 6 avril 2012 - 7 janv. 2009 à 13:47
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/36070-fonction-pour-retirer-les-balises-html-dans-un-string

lassad_haddaji Messages postés 141 Date d'inscription mardi 24 avril 2007 Statut Membre Dernière intervention 6 avril 2012
7 janv. 2009 à 13:47
salut,
est ce que on peut convertir de texte vers html??
s'il y a de réponse merci de me répondre.
Merci
hvb Messages postés 939 Date d'inscription vendredi 25 octobre 2002 Statut Membre Dernière intervention 27 janvier 2009 3
15 mars 2006 à 16:25
c'est pas tres complet, il manque des balises...
et en .net, prefere tastring.IndexOf à InStr, tastring.tolower à Lcase, etc...
C'est beaucoup plus lisible, portable entre differents languages .net et en plus c'est fashion tendance lol
cs_LogOff Messages postés 69 Date d'inscription dimanche 6 octobre 2002 Statut Membre Dernière intervention 14 juillet 2009
20 févr. 2006 à 21:52
Oui le remplacement des balises peut se faire au moment de la lecture du fichier (ligne par ligne donc), mais on peut tout aussi bien stocker le contenu du fichier dans une variable et la traiter ensuite.
cs_Stephane33 Messages postés 630 Date d'inscription samedi 15 février 2003 Statut Modérateur Dernière intervention 9 octobre 2011 1
20 févr. 2006 à 21:41
Ok mais les données sont lues via un streamreader, donc par ligne du fichier
cs_schtroumf Messages postés 59 Date d'inscription mercredi 8 octobre 2003 Statut Membre Dernière intervention 22 juillet 2008
20 févr. 2006 à 21:36
Normalement c'est pas un problème vu que le retour à la ligne est un caractère comme un autre
cs_Stephane33 Messages postés 630 Date d'inscription samedi 15 février 2003 Statut Modérateur Dernière intervention 9 octobre 2011 1
20 févr. 2006 à 20:30
question à 2 balles quand une balise commence à une ligne et fini sur une autre
du style
<td bgcolor='#0F0F0F'
valign ='left'>
Normalement une page bien conçue ne devrait pas présenter ce type de problèmes, mais quand ce sont de pages html générées dynamiquement (php ou asp) la mise en page c'est pas forcement ça...
cs_schtroumf Messages postés 59 Date d'inscription mercredi 8 octobre 2003 Statut Membre Dernière intervention 22 juillet 2008
15 févr. 2006 à 20:12
Bon allez juste une dernière avec les expressions régulières (qui était déjà sur VBfrance mais qui marchait pas vraiment). il faut toujours ajouter une référence au composant Microsoft VBScript regular expression 5.5

Public Function SupprimeHTML(chaine As String)
Dim regExp As regExp
Set regExp = New regExp
regExp.Pattern = "<(.*)>" ' Définition de la balise HTML
regExp.Global = True ' On traite toute la chaine
SupprimeHTML = regExp.Replace(chaine, "")
End Function

Par contre ça gère pas les
:( mais c'est court :)
cs_schtroumf Messages postés 59 Date d'inscription mercredi 8 octobre 2003 Statut Membre Dernière intervention 22 juillet 2008
15 févr. 2006 à 19:46
Bon j'ai une autre solution beaucoup plus bourrin mais je pense que ça peut aider ceux qui voudrait le faire à l'aide des expressions régulières.
NB: il faut ajouter une référence au composant Microsoft VBScript regular expression 5.5 (ou un truc du genre)

Function TestRegExp(myPattern As String, myString As String)
'Création des objets
Dim objRegExp As RegExp
Dim objMatch As Match
Dim colMatches As MatchCollection
Dim RetStr As String

' Création de l'objet expression régulière
Set objRegExp = New RegExp

'On défini le pattern
objRegExp.Pattern = myPattern

'On ignore la case
objRegExp.IgnoreCase = True

'Applicabilité globale
objRegExp.Global = True

'On regarde si le pattern est au moins présent une fois
If (objRegExp.Test(myString) = True) Then

'On récupère les résultats
Set colMatches = objRegExp.Execute(myString) ' Execute la recherhce

For Each objMatch In colMatches ' On parcours les éléments de la collection
RetStr = RetStr & Mid(objMatch.Value, 2, objMatch.Length - 2) 'on retire les > en début de chaine et les < en fin de chaine
Next

Else
' L'expression n'était pas présente dans la chaine
RetStr = "String Matching Failed"
End If

'On retourne la chaine débarrassée de ses balises
TestRegExp = RetStr
End Function


Private Sub Form_Load()
Dim MonString As String
Dim MonPattern As String
Dim Result As String

MonString = "<html><head><title>test</title>
coucou

FIN"
MonPattern = ">.*?<" 'On recherche toutes les expressions comprises entre '>' et '<'

MonString = Replace(MonString, "
", "@@@@") 'On remplace les
pour pas les perdre
Result = TestRegExp(MonPattern, MonString) 'On supprime les balises
Result = Replace(Result, "@@@@", vbCrLf) ' on remet des saut de ligne
MsgBox Result
End Sub
cs_LogOff Messages postés 69 Date d'inscription dimanche 6 octobre 2002 Statut Membre Dernière intervention 14 juillet 2009
15 févr. 2006 à 12:36
Une question bête : on peut pas faire plus simplement ?

Sub main()

Dim strBalises As String
Dim strText As String

strBalises = "span;table;font;div;a"
strText = "salut"

MsgBox Clean(strBalises, strText)

End Sub

Function Clean(strBalises As String, ByVal strText As String) As String

Dim tablBalises() As String
strBalises = LCase(strBalises)
tablBalises() = Split(strBalises, ";")

Dim pos1 As Integer
Dim pos2 As Integer
Dim pos3 As Integer

Dim i As Integer
For i = 0 To UBound(tablBalises())
pos1 = InStr(1, strText, "<")
If pos1 <> 0 Then
pos2 = InStr(pos1, strText, " ")

If pos2 = 0 Then
' c'est une balise sans argument, du genre "
"
strText = Replace(strText, "</" & tablBalises(i) & ">", "")
Else
' c'est une balise avec argument(s), du genre ""
If LCase(Mid(strText, pos1, pos2 - pos1)) = "<" & tablBalises(i) Then
pos3 = InStr(pos1, strText, ">")
If pos3 <> 0 Then
strText = Replace(strText, Mid(strText, pos1, pos3 - pos1 + 1), "")
End If
End If
End If
End If

strText = Replace(strText, "</" & tablBalises(i) & ">", "")
Next i

Clean = strText
End Function


C'est plus court et on se prend moins la tête à taper une ligne de coe pour chaque balise qu'on veut supprimer. Pour le convertir en vb.net ça ne doit pas être difficile, il y a 3 instructions qui changent : for...next, replace() et mid().

Voilà, c'est juste à titre indicatif, bien sûr. Sinon, je ne connais pas la différence entre les fins de balises HTML et XML.
cs_loke Messages postés 53 Date d'inscription dimanche 15 septembre 2002 Statut Membre Dernière intervention 22 août 2006
15 févr. 2006 à 12:18
tu peux aussi utiliser la méthode tout aussi rapide qui est: string.replace(valeur_a_remplacer , nouvelle_valeur)
Rejoignez-nous