Master: Problem/Frage zu str_replace

Hey Leute,
ich hab eine Frage und zwar hab ich eine Suche gebaut die beim auslesen aus einer DB die Titel durchsucht. Das ganze funktioniert auch ohne Probleme. Mein Problem bzw Frage ist wie kann ich den Text nachdem gesucht wurde am besten makieren?

Ich habs so porbiert:

  
echo str_ireplace($_GET['search'], "<font style=\"background-color:#FF9;\">".$_GET['search']."</font>", $row['title']);  

Das Problem ist wenn das suchwort kleine geschreiben wurde, dann wird es nachher bei der ausgabe auch klein geschrieben. Eigendlich soll nur $_GET['search'] unabhängig von groß oder kleinschreibung makiert werden.

Hat da vll jemand eine bessere Idee oder einen Tipp?

Danke euch schon mal.

Mfg

  1. Ich habs so porbiert:

    echo str_ireplace($_GET['search'], "<font style="background-color:#FF9;">".$_GET['search']."</font>", $row['title']);

      
    Aber bitte mach doch ein span-Element herum mit der Klasse "searchword" oder ein strong-Element mit einer Klasse. font-Element sind sowas von antik, da schämt sich der Browser doch, wenn er sowas darstellen muss :)  
      
    
    > Das Problem ist wenn das suchwort kleine geschreiben wurde, dann wird es nachher bei der ausgabe auch klein geschrieben. Eigendlich soll nur $\_GET['search'] unabhängig von groß oder kleinschreibung makiert werden.  
    >   
    > Hat da vll jemand eine bessere Idee oder einen Tipp?  
      
    Ein regulärer Ausdruck und preg\_replace() ist wohl die eleganteste Variante.  
    
    
  2. echo str_ireplace($_GET['search'], "<font style="background-color:#FF9;">".$_GET['search']."</font>", $row['title']);

      
    Ich schlage <span class="search highlight"> vor.  
      
    
    > Das Problem ist wenn das suchwort kleine geschreiben wurde, dann wird es nachher bei der ausgabe auch klein geschrieben.  
      
    Deshalb solltest du nicht das Suchwort, sondern den Treffer einbauen. Das funzt aber mit str\_...() nicht  
      
    echo preg\_replace(  
       "/($\_GET['search'])/i",  
       '<span class="search highlight">'.$1'</span>',  
       $row['title']);  
      
    mfg Beat
    
    -- 
    
    ><o(((°>           ><o(((°>  
    
       <°)))o><                     ><o(((°>o  
    Der Valigator leibt diese Fische
    
    1. echo preg_replace(
         "/($_GET['search'])/i",

      Langsam mit den jungen Pferden: Kontextwechsel.

      http://php.net/manual/de/function.preg-quote.php

      1. echo preg_replace(
           "/($_GET['search'])/i",

        Langsam mit den jungen Pferden: Kontextwechsel.

        Tja, Ich kann ja eigentlich gar kein PHP. Ich kann nur google.

        mfg Beat

        --
        ><o(((°>           ><o(((°>
           <°)))o><                     ><o(((°>o
        Der Valigator leibt diese Fische
        1. echo preg_replace(
             "/($_GET['search'])/i",

          Langsam mit den jungen Pferden: Kontextwechsel.

          Tja, Ich kann ja eigentlich gar kein PHP. Ich kann nur google.

          Das sollte dir deutlich zeigen, was von der Güte der Google-Ergebnisse zu halten ist :D

          1. echo preg_replace(
               "/($_GET['search'])/i",

            Langsam mit den jungen Pferden: Kontextwechsel.

            Tja, Ich kann ja eigentlich gar kein PHP. Ich kann nur google.

            Das sollte dir deutlich zeigen, was von der Güte der Google-Ergebnisse zu halten ist :D

            Wieso, Google führt mich in die gewünschte PHP-Manualseite einer Funktion.
            Dafür dass ich die falsche Funktion suche, kann google ja nichts.

            mfg Beat

            --
            ><o(((°>           ><o(((°>
               <°)))o><                     ><o(((°>o
            Der Valigator leibt diese Fische
            1. Dafür dass ich die falsche Funktion suche, kann google ja nichts.

              Du hast schon die richtige Funktion gefunden, aber ungeachtet von PHP haben bestimmte Zeichen in einem PCRE eine Sonderbedeutung - das ist auch in Perl so ;) und dass man diese nicht einfach unreflektiert übernehmen kann, sollte klar sein.

              1. Dafür dass ich die falsche Funktion suche, kann google ja nichts.

                Du hast schon die richtige Funktion gefunden, aber ungeachtet von PHP haben bestimmte Zeichen in einem PCRE eine Sonderbedeutung - das ist auch in Perl so ;) und dass man diese nicht einfach unreflektiert übernehmen kann, sollte klar sein.

                ach in Perl
                $string =~ s/ \Q($eviluserinput)\E / somefunc($1) /eigx

                Übersetzung nach PHP lass ich mal den anderen.

                mfg Beat

                --
                ><o(((°>           ><o(((°>
                   <°)))o><                     ><o(((°>o
                Der Valigator leibt diese Fische
                1. ach in Perl
                  $string =~ s/ \Q($eviluserinput)\E / somefunc($1) /eigx

                  Übersetzung nach PHP lass ich mal den anderen.

                  Den E-Modifikator lassen wir mal :) der ist noch wesentlich mehr Evil. Im beschriebenen Fall gehts eher darum, dass es etwas seltsam aussehen könnte, wenn jemand nach .* sucht :)

    2. Ich schlage <span class="search highlight"> vor.

      Guter vorschlag und wird auch angenommen :)

      echo preg_replace(
         "/($_GET['search'])/i",
         '<span class="search highlight">'.$1'</span>',
         $row['title']);

      Bringt mir folgende Fehlermeldung:
      Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING

      1. Ich schlage <span class="search highlight"> vor.

        Guter vorschlag und wird auch angenommen :)

        echo preg_replace(
           "/($_GET['search'])/i",
           '<span class="search highlight">'.$1'</span>',
           $row['title']);

        Bringt mir folgende Fehlermeldung:
        Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING

        Das liegt am $1, das gehört in den string $replacement und nicht davon ausgenommen.

        Dass das nicht funktionieren kann, steht in den Basics der PHP-Variablen.

        1. Das liegt am $1, das gehört in den string $replacement und nicht davon ausgenommen.

          Dass das nicht funktionieren kann, steht in den Basics der PHP-Variablen.

          super jetzt funktionierts... Danke!

          So siehts aus:

            
          echo preg_replace("/(".$_GET['search'].")/i",'<span class="search highlight">$1</span>',$row['title']);  
          
          
          1. super jetzt funktionierts... Danke!

            Noch nicht ganz - aktuell ist es noch potentiell "sehr unpraktisch".

            So siehts aus:

            echo preg_replace("/(".$_GET['search'].")/i",'<span class="search highlight">$1</span>',$row['title']);