Meowsalot: Änderungen anzeigen

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)

  1. 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

    1. 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)

      1. 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.

        1. 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.

          http://code.iamkate.com/

          Bis demnächst
          Matthias

          --
          Rosen sind rot.
        2. 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
          
          
      2. 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

        1. @@J o

          Für jedes falsche Ergebnis müsstest du dann wohl das Wort in ein span mit einer anderen Farbe setzen.

          Nein. Es gibt die HTML-Elemente ins und del (verlinkt zu MDN).

          LLAP 🖖

          --
          „Wer durch Wissen und Erfahrung der Klügere ist, der sollte nicht nachgeben. Und nicht aufgeben.“ —Kurt Weidemann