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?
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.
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.
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%Eine Kopie meiner eigenen Antwort von hier .
Was ist mit DaisyDiff ( Java und PHP Versionen verfügbar.
Folgende Features sind wirklich nett:
Tags und Links html php comparison compare pear