Unterschiede zwischen 2 Texten hervorheben?

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Unterschiede zwischen 2 Texten hervorheben?

    Ich habe 2 Texte und möchte die Unterschiede zwischen den Texten hervorheben.

    Beispiel:

    $str1="Ich liebe PHP";
    $str2="Ich hasse PHP";

    Nach dem Vergleich, sollen beide Strings ausgegeben werden und bei der Ausgabe von String 1, sollten die Unterschiede zu String 2 hervorgehoben sein.
    Das mag bei so kurzen Strings noch einfach aussehen, soll jedoch bei längeren Texten auch funktionieren - und was wenn ganze Sätze geändert oder gelöscht werden bzw. an verschiedenen Stellen im Text etwas geändert wurde?

    Soll so ähnlich wie bei Wikipedia (Versionen/Autoren) funktionieren (nur nicht ganz so komplex):
    http://de.wikipedia.org/w/index.php?...action=history

    Wie lässt sich sowas geschickt lösen?
    Zuletzt geändert von j.greil; 11.01.2005, 14:47.

  • #2
    Schnellschuss
    PHP-Code:
    $str1="Ich liebe PHP";
    $str2="Ich hasse PHP";

    $arr1 preg_split('%%'$str1, -1PREG_SPLIT_NO_EMPTY);
    $arr2 preg_split('%%'$str2, -1PREG_SPLIT_NO_EMPTY);

    $diff1 array_keys(array_diff($arr1$arr2));
    $diff2 array_keys(array_diff($arr2$arr1));
    $diff array_values(array_unique(array_merge($diff1$diff2)));
    sort($diff);

    echo 
    '<h1>Start</h1>'.$str1.'<br />'.$str2.'<hr />';
    echo 
    '<h1>Unterschiede</h1>
        <h2>Unterschied $str1 -> $str2</h2>'
    ;
    foreach (
    $arr1 as $key => $value)
        if (
    in_array($key$diff1))
            echo 
    '<span style="color:red;">'.$value.'</span>';
        else
            echo 
    $value;
    echo 
    '<h2>Unterschied $str2 -> $str1</h2>';
    foreach (
    $arr2 as $key => $value)
        if (
    in_array($key$diff2))
            echo 
    '<span style="color:red;">'.$value.'</span>';
        else
            echo 
    $value;
    echo 
    '<h2>Unterschied gesamt</h2>';
    foreach (
    $arr1 as $key => $value)
        if (
    in_array($key$diff))
            echo 
    '<span style="color:red;">'.$value.'</span>';
        else
            echo 
    $value;
    if (
    strlen($str2) > $len strlen($str1))
        echo 
    '<span style="color:red;">'.substr($str2$len).'</span>'
    Zuletzt geändert von mrhappiness; 11.01.2005, 14:59.
    Ich denke, also bin ich. - Einige sind trotzdem...

    Kommentar


    • #3
      okay, du nimmst string 1 und zerhaust ihn durch ein explode anhand der leerzeichen.

      das gleiche machst du mit dem zweiten string.

      nun machst du auf beide jeweils ein count.

      dann machst du eine for schleife und checkst im array ab, ob es einen unterschied zwischen beiden gibt, wenn ja, mach den text dick.

      beispiel:
      PHP-Code:
      <?php
      $str_1 
      "Ich liebe PHP";
      $str_2 "Ich hasse PHP";

      $explode_1 explode(" "$str_1);
      $explode_2 explode(" "$str_2);

      $count_1 count($explode_1);
      $count_2 count($explode_2);

      if(
      $count_1 >= $count_2)
      $count $count_1;
      else
      $count $count_2;

      for(
      $a=0$a<=$count_1$a++)
       echo 
      $explode_1[$a]." ";

      for(
      $a=0$a<=$count$a++)
      {
       if(
      $explode_1[$a] != $explode_2[$a])
       echo 
      "<b>".$explode_2[$a]."</b> ";
      else
      echo 
      $explode_2[$a];
      }
      // nicht getestet
      ?>
      EDIT:
      @happy: grrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr
      Sunshine CMS
      BannerAdManagement
      Borlabs - because we make IT easier
      Formulargenerator [color=red]Neu![/color]
      Herkunftsstatistik [color=red]Neu![/color]

      Kommentar


      • #4
        Original geschrieben von Benny-one
        EDIT:
        @happy: grrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrr
        OffTopic:

        Ich denke, also bin ich. - Einige sind trotzdem...

        Kommentar


        • #5
          OffTopic:
          da versuch ich 1x mal zu helfen und schon is n mod dazwischen. los lass mal schmalle nachgucken, wie viel sekunden unterschied is
          Sunshine CMS
          BannerAdManagement
          Borlabs - because we make IT easier
          Formulargenerator [color=red]Neu![/color]
          Herkunftsstatistik [color=red]Neu![/color]

          Kommentar


          • #6
            OffTopic:
            genug
            OffTopic:
            und genauer sollte meins auch noch sein
            Ich denke, also bin ich. - Einige sind trotzdem...

            Kommentar


            • #7
              Danke eure Mühe, das Skript was jedes Zeichen einzeln überprüft ist zu genau und das andere, was es Wort für Wort macht funktioniert leider (wie befürchtet) nur bei so kurzen Tests.

              Wenn in einem längeren Text irgendwo in der Mitte ein paar Wörter geändert werden und dann die Wortanzahl nicht mehr gleich ist wird der ganze restliche Text als geändert markiert. Das sollte nicht sein.

              Kommentar


              • #8
                @happy: mag sein, aber beide beachten folgendes problem nicht:

                str 1 = ich mag php total gerne;
                str 2 = ich mag php und alles andere total gerne;

                unterschied von 2 zu 1: und alles andere total gerne;

                würde man jetzt das ganze auf zeichenebene mit rechnungen machen, könnte man dieses ergebnis erziehlen:

                unterschied von 2 zu 1: und alles andere
                //edit
                @j.greil: richtig. deswegen musst du alle zeichen zählen. dann musst du die anzahl der zeichen zählen, die neu sind.

                beispiel:
                str1 : ich mag die hunde sehr gerne
                str2: ich mag die katzen auch sehr gerne

                jetzt muss man die zeichen der einzelnen strings vergleichen und jedes neue zeichen zählen. die anzahl der gezählten musst auf den str2 gerechnet werden, damit du das ergebnis
                "katzen auch"
                als geändert erhälst.
                Zuletzt geändert von Benny-one; 11.01.2005, 15:24.
                Sunshine CMS
                BannerAdManagement
                Borlabs - because we make IT easier
                Formulargenerator [color=red]Neu![/color]
                Herkunftsstatistik [color=red]Neu![/color]

                Kommentar


                • #9
                  Original geschrieben von Benny-one
                  unterschied von 2 zu 1: und alles andere [/B]
                  So wärs korrekt!

                  Kommentar


                  • #10
                    hier: http://www.php-resource.de/forum/sho...threadid=49259
                    Sunshine CMS
                    BannerAdManagement
                    Borlabs - because we make IT easier
                    Formulargenerator [color=red]Neu![/color]
                    Herkunftsstatistik [color=red]Neu![/color]

                    Kommentar


                    • #11
                      schon gelöst

                      http://www.php-resource.de/forum/sho...schaukel+array
                      TBT

                      Die zwei wichtigsten Regeln für eine berufliche Karriere:
                      1. Verrate niemals alles was du weißt!


                      PHP 2 AllPatrizier II Browsergame

                      Kommentar


                      • #12
                        ach scheiße
                        Sunshine CMS
                        BannerAdManagement
                        Borlabs - because we make IT easier
                        Formulargenerator [color=red]Neu![/color]
                        Herkunftsstatistik [color=red]Neu![/color]

                        Kommentar


                        • #13
                          Notiz für Benny
                          Schneller werden
                          TBT

                          Die zwei wichtigsten Regeln für eine berufliche Karriere:
                          1. Verrate niemals alles was du weißt!


                          PHP 2 AllPatrizier II Browsergame

                          Kommentar

                          Lädt...
                          X