So zeigen Sie einen Vergleich von 2 HTML-Textblöcken

8

Ich muss zwei Textblöcke mit HTML-Tags nehmen und einen Vergleich durchführen - füge die zwei Textblöcke zusammen und markiere dann, was von einer Version zur nächsten hinzugefügt oder entfernt wurde.

Ich habe die PEAR Text_Diff-Klasse verwendet, um Vergleiche von plain -Text erfolgreich darzustellen, aber wenn ich versuche, Text mit HTML-Tags darin zu werfen, wird es UGLY. Wegen der wort- und zeichenbasierten Vergleichsalgorithmen, die die Klasse verwendet, werden HTML-Tags kaputt und ich bekomme hässliche Sachen wie <p><span class="new"> </</span>p> . Es schlachtet den HTML-Code.

Gibt es eine Möglichkeit, einen Textvergleich zu generieren, während das ursprüngliche gültige HTML-Markup beibehalten wird?

Danke für die Hilfe. Ich arbeite seit Wochen daran: [

Dies ist die beste Lösung, die ich mir vorstellen kann: finde / ersetze jede Art von html-Tag mit einem speziellen Nicht-Standard-Zeichen wie dem Apple-Logo (opt shift k), render den Vergleich mit dieser Art von primativer Abschrift, dann zurück die nicht standardmäßigen Zeichen zurück in Tags. Irgendwelche Rückmeldungen?

    
Steve G. 01.09.2009, 05:02
quelle

6 Antworten

1

Das Problem scheint zu sein, dass Ihr Diff-Programm existierende HTML-Tags als atomare Token anstatt als einzelne Zeichen behandeln sollte.

Wenn Ihre Engine sich auf Wortgrenzen beschränken kann, prüfen Sie, ob Sie die Funktion, die Wortgrenzen festlegt, außer Kraft setzen können, damit HTML-Tags als einzelnes "Wort" erkannt und behandelt werden.

Sie könnten auch tun, was Sie sagen, und ein Nachschlagewörterbuch mit eindeutigen HTML-Tags erstellen, das jedes mit einem eindeutigen, nicht verwendeten Unicode-Wert ersetzt (ich denke, es gibt einige benutzerdefinierte Bereiche, die Sie verwenden können). Wenn Sie dies jedoch tun, werden alle Änderungen an Markup so behandelt, als wären sie eine Änderung des vorherigen oder folgenden Worts, da das Unicode-Zeichen Teil des Worts für den Tokenizer wird. Durch das Hinzufügen eines Leerzeichens vor und nach jedem Token-Unicode-Zeichen werden die HTML-Tag-Änderungen von den Änderungen im Nur-Text-Format getrennt.

    
richardtallent 01.09.2009, 05:54
quelle
3

Einfache Diff, von Paul Butler, sieht aus, als ob es entworfen ist genau das zu tun, was Sie brauchen: Ссылка

Hinweis in seinem PHP-Code, dass ein HTML-Wrapper gibt es: HTMLDiff ($ alt, $ neu)

(Sein Blog-Post auf sie: Ссылка

    
micahwittman 01.09.2009 05:39
quelle
1

Wie wäre es, zuerst einen HTML-Tidier / Formatierer für jeden Block zu verwenden? Dies wird eine Standard "Struktur" erstellen, die Ihr Diff leichter finden könnte

    
Steve 01.09.2009 07:32
quelle
1

Ich frage mich, ob niemand HTMLDiff erwähnt hat, der auf Mediawikis Visuelle Diff . Probieren Sie es aus, ich suchte nach etwas wie Sie und fand es sehr nützlich.

    
Frodik 07.01.2014 15:15
quelle
0

Versuchen Sie zuerst, Ihre HTML-Blöcke über diese Funktion auszuführen:

%Vor%

Das sollte alle Ihre "& lt;" und "& gt;" - s in ihre entsprechenden Codes umwandeln und vielleicht Ihr Problem beheben.

%Vor%     
Mike Trpcic 01.09.2009 05:12
quelle
0

Eine Kopie meiner eigenen Antwort von hier .

Was ist mit DaisyDiff ( Java und PHP Versionen verfügbar.

Folgende Features sind wirklich nett:

  • Arbeitet mit schlechtem HTML, das "in freier Wildbahn" gefunden werden kann.
  • Das Diffing ist mehr auf HTML spezialisiert als die XML-Baumstruktur. Das Ändern eines Teils eines Textknotens führt nicht dazu, dass der gesamte Knoten geändert wird.
  • Zusätzlich zum standardmäßigen visuellen Unterschied kann die HTML-Quelle kohärent gesichtet werden.
  • Bietet leicht verständliche Beschreibungen der Änderungen.
  • Die Standard-GUI ermöglicht das einfache Durchsuchen der Änderungen über Tastenkombinationen und Links.
elhoim 20.10.2009 08:59
quelle

Tags und Links