Avatar billede lifeweb Nybegynder
05. november 2006 - 22:28 Der er 16 kommentarer og
1 løsning

Nem måde at fjerne HTML-tags på

Hej

Jeg har en HTML-mail som jeg gerne vil fjerne samtlige HTML-tags fra, så den kan sendes som ren tekst...

Hvordan håndterer jeg det nemmest???
Avatar billede thesurfer Nybegynder
05. november 2006 - 22:45 #1
Det nemmeste er nok at bruge RegExp.. det kan jeg ikke finde ud af, så jeg kan ikke give dig koden.. vent, så kommer der nok en der kan..

Alternativt kan du erstatte alle "<" og ">" med ingenting..

Men det ville "ødelægge" følgende sætning: "udtrykket 5 > 2 er sandt"..
Så kommer der til at så "udtrykket 5  2 er sandt"..

RegExp er nok den bedste løsning..
Avatar billede wilweb Nybegynder
05. november 2006 - 23:19 #2
Måske kan du bruge ideen fra denne her. Om ikke andet så viser den hvad der sker

<%
Function clearHTMLTags(htmlStr)
    '    Her sættes søgekaraktererne
    sSeekChr1 = "<"
    sSeekChr2 = ">"

    '    I denne For next løkke løbes strengen igennem en
    '    karakter ad gangen
    For i = 1 to len(htmlStr)
        '    Er den nuværende karakter lig med søgekarakter1
        If mid(htmlStr, i, 1) = sSeekChr1 Then
            '    Hvis ja - så loop videre i strengen indtil
            '    vi møder søgekarakter2
            response.write "<BR>HIT SEEK1" & vbCrLf
            Do until mid(htmlStr, i, 1) = sSeekChr2
                ' Vi looper en gang
                i = i + 1
                response.write "<BR>REMOVING TAG Chr: " & i & vbCrLf
            Loop
            '    Nu ved vi at vi er forbi søgekarakter2
            '    Tagget er atlså slut
        Else
            '    Derfor kan ingen karakterer, sim vi møder hernede, være
            '    en del af et tag
            response.write "<BR>ADDING Chr: " & i & ": " &  mid(htmlStr, i, 1) & " TO NEW HTMLSTR" &

vbCrLf
            newHTMLStr = newHTMLStr & mid(htmlStr, i, 1)
        End If
    Next

    '    Returner den modificerede streng
    clearHTMLTags = newHTMLStr
 
End Function


response.write("<P>" & clearHTMLTags("abc<b>defghijk</b>lmnop"))

%>
Avatar billede wilweb Nybegynder
05. november 2006 - 23:20 #3
response.write("<P>" & clearHTMLTags("abc<b>defghijk</b>lmnop") & "</P>")
Avatar billede thesurfer Nybegynder
05. november 2006 - 23:21 #4
Jeg vil klart anbefale en RegExp løsning.. den er også kun på typisk 5 linier.. :-)
Avatar billede thesurfer Nybegynder
05. november 2006 - 23:28 #5
wilweb> Prøv med denne her :-)


dim streng

streng = "Matematik:  3 < 5 er sandt og 3 > 1 er også sandt :-)"

response.write("<P>After: " & clearHTMLTags(streng) & "</P>")
Avatar billede thesurfer Nybegynder
05. november 2006 - 23:29 #6
Tag jeg ikke af "After:" delen i outputtet.. den kan fjernes.. :-)
Avatar billede morhan Novice
06. november 2006 - 08:08 #7
thesufer, da det er et html-dokument, så har du vel overvejet at dit matematiske udtryk skrives "Matematik:  3 &lt; 5 er sandt og 3 &gt; 1 er også sandt :-)"

ellers kan browseren heller ikke finde ud af det :)
Avatar billede thesurfer Nybegynder
06. november 2006 - 14:38 #8
morhan> Det kommer an på, om man konverterer værdierne til HTML entities..

Men ja, det vil give problemer.. :-)
Avatar billede wilweb Nybegynder
06. november 2006 - 15:41 #9
thesurfer:> det kan jeg da godt se, med heldigsom jeg er gik det til det formål jeg skulle bruge den til. Men du har ret!
Avatar billede thesurfer Nybegynder
06. november 2006 - 16:06 #10
Men det er rigtigt hvad morhan skriver i 06/11-2006 08:08:03..

Så egentligt er jeg lidt forkert på den.. :-)
Avatar billede wilweb Nybegynder
06. november 2006 - 17:21 #11
Jep den blev jeg også opmærksom på, så er alle jo glade ikk'
og lifeweb kan så komme videre med at fjerne sine tag's
:>
Avatar billede ellebaek Nybegynder
06. november 2006 - 23:44 #12
<%
Function RemoveHTML( strText )
    Dim RegEx

    Set RegEx = New RegExp
        RegEx.Pattern = "<\s+"

        strText = RegEx.Replace(strText, "&lt; ")
    RegEx.Pattern = "<[^>]*>"
    RegEx.Global = True

    RemoveHTML = RegEx.Replace(strText, "")
End Function

response.write RemoveHTML("<b><a href=""site.asp"">3 < 5</a> og 5 > 2</b>")
%>

Denne her kan "som sådan klare det for dig..."
den tjekker om der er et mellemrum efter <-tegnet. er der det, så erstattes det med &lt;... herefter løbes igennem alle ting der kan være html-tags... og fjerner dem...

det er testet til at virke. men kræver som sagt at der er et mellemrum efter < hvis det benyttes til at vise at noget er større end noget andet etc...

men det er testet på den viste streng, og der virker det i hvert fald...
Avatar billede lifeweb Nybegynder
08. november 2006 - 20:41 #13
undskyld jeg ikke har svaret herinde særlig hurtigt - jeg har ikke fået mails fra exp.dk :S

Nå, men ellebaek kommer med en interessant løsning...

Jeg behøver ikke tage højde for eksempelvis &lt; da jeg bruger FCK Editor som selv retter sådanne ting til...

Jeg vil bare gerne fjerne eksempelvis <h1> eller <span style="font-weight:bold;">

Vil jeg ikke godt nok kunne det med:

Function RemoveHTML( strText )
    Dim RegEx

    Set RegEx = New RegExp
    RegEx.Pattern = "<[^>]*>"
    RegEx.Global = True

    RemoveHTML = RegEx.Replace(strText, "")
End Function
Avatar billede ellebaek Nybegynder
08. november 2006 - 22:30 #14
jo.... det burde være rigeligt...
den tager i hvert fald alt mellem < og så næste > og så næste < osv...
Så jeg vil mene at den sagtens kan klare det for dig :-)
Avatar billede lifeweb Nybegynder
09. november 2006 - 00:42 #15
det virker

ellebaek - hvis du vil have point må du lige smide et svar :D
Avatar billede ellebaek Nybegynder
09. november 2006 - 01:12 #16
jeg smider et svar her :-)

Glad for det fungede...
Og så hopper jeg under dynen :-)

Mvh. Jens
Avatar billede tdh1309 Juniormester
09. november 2006 - 14:44 #17
Hej

Dette var lige hvad jeg søgte.
Jeg har dog udviddet det en anelse (ikke kønt men det virker)
Ovenstående løsning til bla. ikke hensyn til linieskift med <BR>, samt tabeller </TR>, det skulle min version klare.

Function RemoveHTML( strText )
    ' Erstatter </TR>, <BR>, <HR> med Carriage return (ascii 0D)
    Dim RegEx   
    Set RegEx = New RegExp
    RegEx.Pattern = "<(/TR|BR|HR)[^>]*>"
    RegEx.Global = True
    strText = RegEx.Replace(strText, CHR(13))
   
    ' Erstatter </TD> med mellemrum (ascii 20)
    Set RegEx = New RegExp
    RegEx.Pattern = "</TD>"
    RegEx.Global = True
    strText = RegEx.Replace(strText, CHR(32))
   
    ' Erstatter alle HTML tags med tom
    Set RegEx = New RegExp
    RegEx.Pattern = "<[^>]*>"
    RegEx.Global = True
    strText = RegEx.Replace(strText, "")
   
    ' Erstatter de steder hvor der optræder mere end et mellemrum med KUN ET mellemrum
    Set RegEx = New RegExp
    RegEx.Pattern = " +"
    RegEx.Global = True
    strText = RegEx.Replace(strText, CHR(32))
   
    ' Erstatter linieskift efterfult af mellemrum med linieskift (rykker altså alle linier ind til venstre)   
    Set RegEx = New RegExp
    RegEx.Pattern = CHR(13) & ".? "
    RegEx.Global = True
    strText = RegEx.Replace(strText, CHR(13))
       
    RemoveHTML = strText
End Function
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester