2012-10-19 4 views
8

Ich habe eine HTML-Datei und darin kann es Javascript, PHP und all diese Sachen Menschen möglicherweise oder nicht in ihre HTML-Datei einfügen.Finden von Kommentaren in HTML

Ich möchte alle Kommentare aus dieser HTML-Datei extrahieren.

Ich kann dies dabei zwei Probleme hinweisen:

  1. Was ist ein Kommentar in einer Sprache ist, kann in einem anderen kein Kommentar sein.

  2. In Javascript sind die restlichen Zeilen mit dem Marker // auskommentiert. Aber URLs enthalten auch // in ihnen und ich kann daher gut Teile von URLs zu beseitigen, wenn ich nur ersetzen ersetzen // und dann die Rest der Zeile, mit nichts.

Das ist also kein triviales Problem.

Gibt es irgendwo schon eine Lösung dafür?

Hat schon jemand das getan?

+3

Sie haben Recht, dass dies nicht trivial ist. Um Kommentare zuverlässig zu entfernen, müssen Sie die Datei vollständig analysieren (PHP, HTML und Javascript). Ich schlage vor, wenn möglich in PHP zu arbeiten; Während ich Perl besser mag, sind PHP-Tools, die an sich selbst arbeiten, besser als Perl-Tools, um mit PHP zu arbeiten. Hier ist etwas, um Sie zu beginnen: http://stackoverflow.com/questions/503871/best-way-to-automatisch-remove-comment-from-php-code. Dann müssen Sie nur HTML- und JavaScript-Parser in PHP finden, um dies für diese Teile der Datei zu tun. – dan1111

+0

Warum würden Sie PHP in Ihrer HTML-Datei haben? Ich habe nur CSS, JavaScript und HTML, dann google "HTML-Minifier" für Produkte, die Kommentare, Leerzeichen und generell "schlank" Ihre Seiten entfernen können. –

+1

@RB. Vor gerendert? – Jivings

Antwort

0

Es scheint von Ihrem Wort, dass Sie über einen Ansatz auf der Basis von regulären Ausdrücken nachdenken: Es ist ein Schmerz, dies für die gesamte Datei zu tun, versuchen Sie, einige interessante interessante oder uninteressante Texte zu markieren oder zu bearbeiten Was bleibt von Ihrem Sieb nach den Kriterien zum Aufbewahren/Verwerfen übrig? Sehen Sie sich HTML :: Tree und TreeBuilder an, es könnte sehr nützlich sein, sich mit dem HTML-Markup zu beschäftigen.

2

Problem 2: Wird nicht jede URL mit "www.url.com" oder "www.url.com" angegeben, wenn Sie sie in einer der beiden Sprachen schreiben? Ich bin mir nicht sicher. Wenn das der Fall ist, müssen Sie lediglich den Code analysieren und prüfen, ob vor den Backslashes Anführungszeichen stehen, um zu wissen, ob es sich um eine echte URL oder nur um einen Kommentar handelt.

+0

Das ist eigentlich, was ich gerade mache. –

+0

Sie haben das Problem also gelöst? Wenn nicht (vielleicht habe ich Ihre Frage nicht richtig verstanden), was ist das Problem? :) –

1

Sehen Sie in Parser-Generatoren wie ANTLR, die Grammatiken für many languages hat, und schreiben Sie einen verschachtelnden Parser, um Kommentare zuverlässig zu finden. Reguläre Ausdrücke helfen Ihnen nicht, wenn Genauigkeit wichtig ist. Selbst dann wird es nicht 100% genau sein.

Betrachten

Problem 3, ein Kommentar in einer Sprache in einer Sprache nicht immer ein Kommentar.

Problem 4, ein Kommentar in einer Sprache eingebettet möglicherweise nicht ein Kommentar sein.

<button onclick="&#47;&#47; this is a comment//&#10;notAComment()"> 

Problem 5, was ein Kommentar kann davon abhängen, wie der Browser konfiguriert ist.

<noscript><!-- </noscript> Whether this is a comment depends on whether JS is turned on --> 
<!--[if IE 8]>This is a comment, except on IE 8<![endif]--> 

Ich hatte dieses Problem teilweise für kontextuelle Templating-Systeme zu lösen, die Kommentare aus dem Quellcode elide Details undichten Software-Implementierung zu verhindern.

https://github.com/mikesamuel/html-contextual-autoescaper-java/blob/master/src/tests/com/google/autoesc/HTMLEscapingWriterTest.java#L1146 zeigt einen Testfall, in dem ein Kommentar in JavaScript identifiziert wird. Spätere Testfälle zeigen Kommentare in CSS und HTML an. Sie können diesen Code möglicherweise anpassen, um Kommentare zu finden.Kommentare in PHP-Code-Abschnitten werden nicht behandelt.

0

Ich würde die HTML-Datei in ein Zeichen-Array konvertieren und analysieren. Sie können Schlüsselzeichenfolgen wie "<", "-", "www", "http" erkennen, während Sie vorwärts gehen und diese Segmente überspringen oder löschen.

Die Start/Ende-Indizes müssen korrekt identifiziert werden, was eine Herausforderung darstellt, aber Sie haben volle Leistung.

Es gibt auch andere Möglichkeiten, den Prozess zu vereinfachen, wenn die Leistung kein Problem darstellt. Zum Beispiel können alle Tags mit XML :: Twig erfasst werden und die Zeichenfolge kann analysiert werden, um JS-Kommentare zu erkennen.