HTML Tags aus Datei entfernen



  • Guten Tag,

    gibt es irgendwelche Funktionen, mit der ich eine Textdatei von allen HTML Elementen entfernen kann ?
    Oder was ähnliches wie Regex und dann replace?

    VG,
    kenneth



  • Nein.

    Was du suchst ist PHP.


  • Mod

    kenneth schrieb:

    Guten Tag,

    gibt es irgendwelche Funktionen, mit der ich eine Textdatei von allen HTML Elementen entfernen kann ?

    Wenn du dir welche schreibst...

    Oder was ähnliches wie Regex und dann replace?

    Eher so etwas ähnliches wie ein XML-Parser. Oder eigentlich genau das gleiche wie ein XML-Parser. Reguläre Ausdrücke sind bekanntlich nicht ausreichend, um HTML zu parsen. Oder in Informatikersprech: Reguläre Ausdrücke haben die Mächtigkeit eines endlichen Automaten, das heißt, man kann damit Sprachen mit regulärer Grammatik verarbeiten. Aber HTML ist eine Sprache mit kontextfreier Grammatik. Da braucht man mindestens einen Kellerautomaten, um das zu verarbeiten.



  • SeppJ schrieb:

    Reguläre Ausdrücke sind bekanntlich nicht ausreichend, um HTML zu parsen.

    Um HTML <...> rauszulöschen, sollte Regex reichen.
    weiter hier: https://stackoverflow.com/questions/18768878/regex-to-detect-html-tags-and-replace-just-some


  • Mod

    noname_i_hate `X++ schrieb:

    SeppJ schrieb:

    Reguläre Ausdrücke sind bekanntlich nicht ausreichend, um HTML zu parsen.

    Um HTML <...> rauszulöschen, sollte Regex reichen.
    weiter hier: https://stackoverflow.com/questions/18768878/regex-to-detect-html-tags-and-replace-just-some

    Und was machste, wenn eine HTML-Datei einen Text mit HTML-Tags drin darstellt?



  • SeppJ schrieb:

    noname_i_hate `X++ schrieb:

    SeppJ schrieb:

    Reguläre Ausdrücke sind bekanntlich nicht ausreichend, um HTML zu parsen.

    Um HTML <...> rauszulöschen, sollte Regex reichen.
    weiter hier: https://stackoverflow.com/questions/18768878/regex-to-detect-html-tags-and-replace-just-some

    Und was machste, wenn eine HTML-Datei einen Text mit HTML-Tags drin darstellt?

    der sieht etwa so aus:

    ... < ... > ....

    kannst ja dann aus < < machen usw.
    oder auch nicht, wie es beliebt


  • Mod

    noname_i_hate `X++ schrieb:

    der sieht etwa so aus:

    ... < ... > ....

    Nicht unbedingt. Es gibt auch Tags, die erlauben, ungequotetes HTML als Inhalt zu haben.



  • SeppJ schrieb:

    noname_i_hate `X++ schrieb:

    der sieht etwa so aus:

    ... < ... > ....

    Nicht unbedingt. Es gibt auch Tags, die erlauben, ungequotetes HTML als Inhalt zu haben.

    Echt? Welche?



  • <pre> wirds wohl sein.

    Also wenn man vernünftig an die Sache rangehen will und man jegliche Fehlerquelle vermeiden will sollte man nen Parser hernehmen, so seh ich dat.



  • stateofmind schrieb:

    <pre> wirds wohl sein.

    habe ich probiert

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    <pre>
        <h1><u>hello doof</h1>
    </pre>
    </body>
    </html>
    

    das HTML in pre wird auch gerendert.

    Noch ein Vorschlag?



  • ohne berücksichtigung von "html in html" könnte man es in C einfach so machen.

    #include <stdio.h>
    
    void mach_html_weg (char *in, char *out)
    {
        char state = '>';
        char c;
        for (c=1; (c=*in); in++)
        {
            if (c == '<' || c == '>') {
                state = c;
                continue;
            }
            if (state == '>')
                *out++ = c;
        }
        *out = 0;
    }
    
    int main ()
    {
        char *html = "<html>hello <blah>blubb << nana>>> lala</fuck> /fuck";
        char stripped[256];
        mach_html_weg (html, stripped);
        puts (stripped);
    }
    

  • Mod

    (){ |& }; schrieb:

    stateofmind schrieb:

    <pre> wirds wohl sein.

    habe ich probiert

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
    </head>
    <body>
    <pre>
        <h1><u>hello doof</h1>
    </pre>
    </body>
    </html>
    

    das HTML in pre wird auch gerendert.

    Noch ein Vorschlag?

    Da muss ich jetzt als absoluter HTML-Noob ein Beispiel liefern? Traurig.

    <!DOCTYPE html>
    <html>
    <body>
    <textarea><!DOCTYPE html>
    <html>
    <body>
    
    <h1>My First Heading</h1>
    
    <p>My first paragraph.</p>
    
    </body>
    </html>
    </textarea>
    </body>
    </html>
    


  • Die <! Geschichten werden wohl Probleme machen.
    Also z.B. CDATA oder HTML Kommentare.

    Ich glaube aber dass kenneth vermutlich gar keinen voll standardkonformen Parser für voll standardkonforme HTML Files mit beliebigem Inhalt möchte, sondern einfach nur ein paar Formatierungs-Tags ala <i> aus Text entfernen.

    Je nachdem was seine Anforderungen sind könnten Regexen oder der Vorschlag von "(){ |& };" also durchaus reichen.



  • SeppJ schrieb:

    Da muss ich jetzt als absoluter HTML-Noob ein Beispiel liefern? Traurig.

    Das ist doch nicht traurig. Es sei dir gedankt.



  • <!-- Mal gucken ob <i>dieser</i> HTML Syntax Highlighter schlau genug ist -->
    <![CDATA[
    OK, normale Tags in Kommentaren scheint er zu packen --> Gucken wir mal>
    wie er mit <i>CDATA</i> umgehen kann
    ]]>
    
    <!-- <![CDATA[ CDATA in Kommentar ]]> still comment --> outside
    <!-- <![CDATA[ CDATA in Kommentar --> outside       ]]> outside
    <![CDATA[ <!-- Kommentar in CDATA --> still CDATA   ]]> outside
    <![CDATA[ <!-- Kommentar in CDATA ]]> outside       --> outside
    
    <![CDATA[xxx>yyy]]>zzz
    <![CDATA aaa>bbb]]>ccc
    
    Nicht schlecht Herr Specht :)
    

  • Mod

    hustbaer schrieb:

    <!-- Mal gucken ob <i>dieser</i> HTML Syntax Highlighter schlau genug ist -->
    <![CDATA[
    OK, normale Tags in Kommentaren scheint er zu packen --> Gucken wir mal>
    wie er mit <i>CDATA</i> umgehen kann
    ]]>
    
    <!-- <![CDATA[ CDATA in Kommentar ]]> still comment --> outside
    <!-- <![CDATA[ CDATA in Kommentar --> outside       ]]> outside
    <![CDATA[ <!-- Kommentar in CDATA --> still CDATA   ]]> outside
    <![CDATA[ <!-- Kommentar in CDATA ]]> outside       --> outside
    
    <![CDATA[xxx>yyy]]>zzz
    <![CDATA aaa>bbb]]>ccc
    
    Nicht schlecht Herr Specht :)
    

    Toller Beitrag 👍

    Die Syntaxhighlighter hat, soweit ich weiß, Dravere tatsächlich persönlich geschrieben, keine Fertigware.



  • Unter Linux gibt es das Programm html2text - ist ja open Source und man kann nachschauen, wie die das machen.


  • Mod

    pferdefreund schrieb:

    Unter Linux gibt es das Programm html2text - ist ja open Source und man kann nachschauen, wie die das machen.

    Ich denke nicht, dass es ein schweres Geheimnis ist, wie man HTML parsen kann. Es ist ganz einfach. Bloß die Abkürzung über Regex oder ähnliche Techniken kann man aus den genannten Gründen nicht gehen.


Log in to reply