SuFu anschaulicher gestalten

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

  • SuFu anschaulicher gestalten

    Hallöchen...


    Ich überlegte mir, die Ergebnise einer Suche übersichtlicher und anschaulicher zu gestalten indem ich das Suchwort im Ergebnis farblich und kursiv hervorhebe.
    Funktioniert auch soweit wunderbar, mit nur einem Hacken.

    Es wird 'nur' das hervorgehoben, was als einzelnes Wort gefunden wurde. Die Suche wird mit einem LIKE ausgeführt, es werden also auch Worte ausgegeben, die das Suchwort enthalten, diese aber werden nicht hevorgehoben. Wie kann man dem abhelfen, bzw. es ändern?


    Zur Zeit schaut das ganze folgendermassen aus (nur relevantes):

    PHP-Code:
    $a $erkl;
    $b $_POST["suchbegriff"];
    $pattern "/$b/";

    echo 
    preg_replace($pattern, ('<font color="green"><B><I>' $b '</I></B></font>'), $a); 
    Gruss & Danke.

  • #2
    Re: SuFu anschaulicher gestalten

    Es wird 'nur' das hervorgehoben, was als einzelnes Wort gefunden wurde. Die Suche wird mit einem LIKE ausgeführt, es werden also auch Worte ausgegeben, die das Suchwort enthalten, diese aber werden nicht hevorgehoben. Wie kann man dem abhelfen, bzw. es ändern?
    Du willst wahrscheinlich das ganze Wort hervorheben? Versuch mal folgendes:
    PHP-Code:
    $b $_POST["suchbegriff"];
    $pattern '/\\s(.*'.$b.'.*)\\s/';

    echo 
    preg_replace($pattern'<span style="color:green;font-weight:bold;font-style:italic;">$1</span>'$a); 

    Kommentar


    • #3
      Re: Re: SuFu anschaulicher gestalten

      Original geschrieben von PHP-Desaster
      PHP-Code:
      $pattern '/\\s(.*'.$b.'.*)\\s/'
      eher so:
      $pattern='/\b(.*'.preg_quote($b).'.*)\b/iU';

      ich habe allerdings beides nicht getestet, aber das kann ja medium22 machen.

      Kommentar


      • #4
        Hallöchen


        Deine Vermutung ist richtig.

        Dein Beispiel liefert allerdings nicht den gewünschten Erfolg. Es schneidet sogar manchmal Inhalte (davor und danach) ab.

        btw 1: ist das $1 einfach übersehen beim einfügen oder soll ich das 1:1 so übernehmen?
        btw 2: was bedeutet das \s ? (für mich damit ich auch weiss wozu es gemacht wird, falls ich das auch mal brauchen kann)

        *edit*

        Auch das Beispiel über mir schneidet teilweise Worte (davor und danach) ab, ansonsten hab ich schonmal mehr "grün" als bisher. <g>
        Zuletzt geändert von medium22; 24.11.2007, 18:12.

        Kommentar


        • #5
          \b geht natürlich auch:

          \s: any whitespace character
          \b: word boundary

          Der Modifier i, wenn du Groß- und Kleinschreibung ignorieren willst.
          Der Modifier U macht Sinn ^^

          und ein preg_quote ist angebracht

          Es schneidet sogar manchmal Inhalte (davor und danach) ab.
          Was für Inhalte sind das? Vielleicht ein Beispiel?

          Kommentar


          • #6
            Hallöchen..


            Beispiel:

            Suchwort: Wort
            Ergebnis: Wort für Jugendalter.
            Eigentlicher Inhalt wäre aber: Ein Anderes Wort für Jugendalter.

            Diese Beispiel hab' ich mit



            PHP-Code:
            $pattern='/\b(.*'.preg_quote($b).'.*)\b/iU'
            gesucht

            Kommentar


            • #7
              ich oute mich mal: ich kann dir bei deinem beispiel nicht folgen.

              nur falls du dich wundern solltest, dass keiner mehr antwortet

              Kommentar


              • #8
                Hallöchen..


                Dann versuche ich mich deutlicher Auszudrücken, kein Ding. <g>

                Also,
                - ich quäle die SuFu mit dem Wort Wort
                - als Ergebnis bekomme ich von der Sufu das gesuchte Wort inkl. allem was in der Spalte sonst noch steht, in diesem Falle Wort für Jugendalter.
                - in der Spalte steht aber im Orgnial Ein Anderes Wort für Jugendalter.

                Richtig ist an der momentanen SuFu lediglich das Wort dabei grün gefärbt & kursiv ausgegeben wird. Aber das dadurch Teile des Inhalts vergessen/verloren werden stört schon.

                Kommentar


                • #9
                  Original geschrieben von medium22
                  - ich quäle die SuFu mit dem Wort Wort
                  - als Ergebnis bekomme ich von der Sufu das gesuchte Wort inkl. allem was in der Spalte sonst noch steht, in diesem Falle Wort für Jugendalter.
                  - in der Spalte steht aber im Orgnial [B]Ein Anderes Wort für Jugendalter
                  ähm, ja.
                  aber die "Sufu" kennst doch nur _du_. was hat das ganze mit dem "einfärben" zu schaffen, wenn _deine_ "Sufu" nicht alles liefert?

                  Kommentar


                  • #10
                    Da gebe ich 3DMax recht, an der Ersetzung liegt es nicht!! Deine Frage war ja eher, dass bei der Suche "Jugend" das Word "Jugendalter" markiert wird, oder nicht?!?

                    Kommentar


                    • #11
                      Hmz.... ich versuchs nochmal..


                      Gebe ich das Ergebnis mit
                      PHP-Code:
                      $pattern "/$b/"
                      aus, so sind zwar alle Inhalte komplett vorhanden, aber eben nicht alles gefärbt wie es soll.

                      Gebe ich das Ergebnis mit
                      PHP-Code:
                      $pattern '/\s(.*'.$b.'.*)\s/';
                      // bzw. mit
                      $pattern='/\b(.*'.preg_quote($b).'.*)\b/iU'
                      aus, so werden nicht mehr alle Inhalte ausgegeben. Also muss der Fehler wo da drin irgendwo liegen, meinst nicht auch?


                      *edit*

                      @ PHP-Desaster

                      Korrekt, dass war meine ursprüngliche Frage, aber da sich ja o.g. Fehler einschlichen mag ich dem auch auf den Grund gehen.

                      Kommentar


                      • #12
                        Reicht nicht ein einfaches
                        PHP-Code:
                        echo str_replace($b'<em>'.$b.'</em>'$a); 
                        ?

                        Kommentar


                        • #13
                          Leider nein.. Auch da wird nur das einzeln vorhandene Wort hervorgehoben aber nicht solche, in denen das Suchwort vorhanden ist.

                          Kommentar


                          • #14
                            ich hab's jetzt mal kurz getestet.
                            abgeschnitten wurde nichts, nur zu viel fett hervorgehoben. mit \w* anstelle von .* sollte es passen:

                            $suchwort = 'Wort';
                            $suchergebnis = 'Ein anderes Wort für Jugendalter';

                            $pattern = '/\b(\w*'.preg_quote($suchwort).'\w*)\b/iU';

                            echo preg_replace($pattern, '<b>\1</b>', $suchergebnis);

                            Kommentar


                            • #15
                              Original geschrieben von medium22
                              Leider nein.. Auch da wird nur das einzeln vorhandene Wort hervorgehoben aber nicht solche, in denen das Suchwort vorhanden ist.
                              Das kann aber nur an der Groß-/Kleinschreibung liegen. Nimm halt str_ireplace() ... was anderes versucht ihr mit preg_replace() nämlich auch nicht.

                              Kommentar

                              Lädt...
                              X