Änderungen anzeigen
Meowsalot
- php
0 J o
Hallo,
habe ich die Möglichkeit dem User zu zeigen was nach einem Update sich an einem Text geändert hat? Nehmen wir ein Bespiel:
$Inhalt1 = "Ich bin ein Test";
$Inhalt2 = "Ich bin ein süßer Test, dem es einfach nur heiß ist";
Ich möchte jetzt gerne ausgeben was sich geändert hat.
Bis bald!
Meowsalot (Bernd)
Hey,
$Inhalt1 = "Ich bin ein Test"; $Inhalt2 = "Ich bin ein süßer Test, dem es einfach nur heiß ist";
Also soll die Ausgabe 'süßer, dem es einfach nur heiß ist' sein?
Man könnte beide Texte mit explode
auseinander nehmen und dann jedes Wort einzeln prüfen, ob es im anderen enthalten ist.
Oder man könnte mit strrpos
nach Wörtern suchen.
Gruß
Jo
Hallo J,
Also soll die Ausgabe 'süßer, dem es einfach nur heiß ist' sein?
genau. Ob ich es ausgeben lassen weiß ich nicht, kann zu unschönen Texten kommen ;) Viel lieber würde ich es farblich wie hier im Forum darstellen.
Man könnte beide Texte mit
explode
auseinander nehmen und dann jedes Wort einzeln prüfen, ob es im anderen enthalten ist.
OK, dann schau ich mir mal explode
an.
Bis bald!
Meowsalot (Bernd)
Tach!
Ob ich es ausgeben lassen weiß ich nicht, kann zu unschönen Texten kommen ;) Viel lieber würde ich es farblich wie hier im Forum darstellen.
Such dir eine Komponente, die solch ein Diff erzeugen und darstellen kann. Ich kann mir nicht vorstellen, dass es hinreichend trivial ist, um es mal eben schnell selbst zu entwickeln.
dedlfix.
Hallo @Meowsalot,
Such dir eine Komponente, die solch ein Diff erzeugen und darstellen kann. Ich kann mir nicht vorstellen, dass es hinreichend trivial ist, um es mal eben schnell selbst zu entwickeln.
Bis demnächst
Matthias
diff gibts als Linux-Programm. Arbeitet zeilenweise. Ich vermute deshalb mal Meowsalot will NICHT sowas:
<?php
class stringDiff {
public $str_old = "";
public $str_new = "";
private $file_old = "";
private $file_new = "";
function __construct () {
$this -> file_old = `mktemp`;
$this -> file_new = `mktemp`;
}
function __destruct() {
unlink( $this -> file_old );
unlink( $this -> file_new );
}
function getDiff( $str_old, $str_new ) {
file_put_contents( $this -> file_old, $str_old ) ;
file_put_contents( $this -> file_new, $str_new ) ;
$file_old = $this -> file_old;
$file_new = $this -> file_new;
return `diff "$file_old" "$file_new"`;
}
function printDiff($str_old, $str_new, $tagName='pre') {
echo '<' . $tagName . '>' . htmlspecialchars( $this -> getDiff( $str_old, $str_new ) ) . '</' . $tagName . '>';
}
}
# Test:
$str[] = "Hat der alte Hexenmeister
sich doch einmal
wegbegeben
und nun sollen seine Geister
auch nach meinem
Wille leben!";
$str[] = "Hat der alte Hexenmeister
sich doch nochmal
herbegeben
und nun sollen meine Geister
auch nach seinem
Wille leben!";
$oDiff=new stringDiff();
echo $oDiff -> getDiff( $str[0],$str [1] );
Output:
2,5c2,5
< sich doch einmal
< wegbegeben
< und nun sollen seine Geister
< auch nach meinem
---
> sich doch nochmal
> herbegeben
> und nun sollen meine Geister
> auch nach seinem
Jetzt könnte man die Strings nehmen, alle Leerzeichen durch Zeilenumbrüche ersetzen
echo $oDiff -> getDiff( str_replace (" ", "\n", $str[0] ) ,str_replace (" ", "\n", $str [1]) );
und bekäme eine nette Liste... mit der man weitermachen kann:
7,8c7,8
< einmal
< wegbegeben
---
> nochmal
> herbegeben
12c12
< seine
---
> meine
16c16
< meinem
---
> seinem
Hey,
Also soll die Ausgabe 'süßer, dem es einfach nur heiß ist' sein?
genau. Ob ich es ausgeben lassen weiß ich nicht, kann zu unschönen Texten kommen ;) Viel lieber würde ich es farblich wie hier im Forum darstellen.
Man könnte beide Texte mit
explode
auseinander nehmen und dann jedes Wort einzeln prüfen, ob es im anderen enthalten ist.OK, dann schau ich mir mal
explode
an.
Ah, ok. Dann würde ich den kleineren String auseinander nehmen und dann den größeren mit strpos
durchsuchen. Für jedes falsche Ergebnis müsstest du dann wohl das Wort in ein span
mit einer anderen Farbe setzen. Außer das vorherige Ergebnis war auch schon falsch, dann das neue Wort einfach mit in den span
.
Gruß
Jo