Anzeige

preg_replace Problem

preg_replace Problem | PSD-Tutorials.de

Erstellt von philipp1988, 10.11.2008.

  1. philipp1988

    philipp1988 Nicht mehr ganz neu hier

    Dabei seit:
    14.09.2005
    Beiträge:
    248
    Geschlecht:
    männlich
    Ort:
    Braunschweig
    preg_replace Problem
    Hallo Community,

    ich habe folgendes Problem:

    Ich habe eine Datenbank mit X einträgen, die jeweils eine Überschrift wie auch einen Inhalt hat.

    Nun habe ich ein Suchfeld wo ich was eingeben kann und ich nach dem eingegeben in der Datenbank suche.
    Hat er was gefunden ( unabhängig von Groß und Kleinschreibung ) soll er alle Datensätze ausgeben und rot makieren.
    Problem dabei:
    Alle gefundenden Bereichen werden rot makiert aber dabei der Inhalt des Suchfeld ersetzt.

    Sprich wenn ich nach ll suche, wird Ha[ll]o makiert.
    Wenn ich nach LL suche, wird auch Ha[LL]o makiert..aber es wird ja mit dem gesuchten ersetzt....

    Sprich ich möchte die Schreibweise schon behalten :)

    Hoffe ihr wisst, was ich meine...

    Mein Quelltext


    PHP:
    1.  
    2.  
    3. $query = mysql_query("Select * from lexikon where title LIKE '%".$_GET['suchfeld']."%' OR text LIKE '%".$_GET['suchfeld']."%' ");
    4.  
    5.  
    6. if(mysql_num_rows($query) == 0)
    7. {
    8.     echo "Die Suche nach dem Wort <strong>".$_GET['suchfeld']."</strong> ergab leider <strong>0</strong> Treffer.";
    9. }
    10. else
    11. {
    12.     echo "Die Suche nach dem Wort <strong style='color:#FF0000;'>".$_GET['suchfeld']."</strong> ergab <strong>".mysql_num_rows($query)."</strong> Treffer.";
    13. }
    14.  
    15. echo "<br /><br />";
    16. while($row = mysql_fetch_array($query)) {
    17.  
    18.  
    19. $t = "<h3>".$row['title']."</h3>";
    20. $s = $_GET['suchfeld'];
    21. $r = "<strong style='color:#FF0000;'>".$_GET['suchfeld']."</strong>";
    22.  
    23. $titles = preg_replace("/((<[^>]*)|$s)/ie", '"\2"=="\1"? "\1":"$r"', $t);
    24.  
    25. echo $titles;
    26.  
    27. $t = $row['text'];
    28. $s = $_GET['suchfeld'];
    29. $r = "<strong style='color:#FF0000;'>".$_GET['suchfeld']."</strong>";
    30.  
    31. echo preg_replace("/((<[^>]*)|$s)/ie", '"\2"=="\1"? "\1":"$r"', $t);
    32.  
    33.  
    MFG und vielen Dank,
    Philipp
     
    #1      
  2. netbandit

    netbandit Aktives Mitglied

    12
    Dabei seit:
    18.05.2008
    Beiträge:
    1.145
    Geschlecht:
    männlich
    preg_replace Problem
    AW: preg_replace Problem

    PHP:
    1.  
    2. <?
    3. $suche='test';
    4. $str='Ein Text mit TEsT, tesT und xTest... ist halt zum Testen da';
    5. echo preg_replace("/(" . $suche . ")/i", "<b>\\1</b>", $str);
    6. ?>
    7.  
     
    #2      
  3. blackout

    blackout Schaf im Wolfspelz

    Dabei seit:
    12.09.2005
    Beiträge:
    3.359
    Geschlecht:
    männlich
    Ort:
    Würzburg
    Kameratyp:
    Rollei 35 S
    preg_replace Problem
    AW: preg_replace Problem

    Mögliches Sicherheitsrisiko: In deinen Regex benutzt du eine Benutzereingabe direkt, ohne sie zu maskieren ("/((<[^>]*)|$s)/ie"). Der Benutzer kann also durch sein Suchstichwort beliebige reguläre Ausdrücke ausführen. Hier scheint mir das nicht schlimm zu sein, allgemein solltest du aber jegliche Benutzereingaben auf Validität prüfen. Im Falle von Regex wäre das mit preg_quote zu machen.

    Edit: Kann mir jemand (per PM, will hier nich das Topic übernehmen) erklären, was es mit den '"\2"=="\1"? "\1":"$r"'-Ersetzungen auf sich hat? Sieht so aus wie ne art Regex im Ersetzungsteil à la Trinitätsoperator, hab das so noch nie gesehen. Falls es einfach ein Teil des Skripts ist hab ich es noch weniger verstanden als ich ohnehin schon dachte ;)
     
    Zuletzt bearbeitet: 10.11.2008
    #3      
Seobility SEO Tool
x
×
×