snoot: preg_replace verschluckt Leerzeichen, oder doch nicht?

Beitrag lesen

Hio,

sorry wegen dem verwirrenden Titel, aber genau so merkwürdig ist mein Problem.

Ich verarbeite Benutzereingaben mittels Ajax und liefere passende Wortvorschläge als Liste dafür zurück (Ajax Suggest).

Gibt der Besucher "Unter" ein, erhält er z.B. "Unterdruck", "Unterlage" und "Unterschied" zurück. Gleichzeitig wird der übereinstimmende String ("Unter") in den Vorschlägen mittels preg_replace fett formatiert:

$anzeige_fett = preg_replace("/($eingabe)/i", "<strong>$1</strong>", $anzeige, 1);

Das klappt soweit auch, allerdings tritt bei zwei Wörtern (durch Leerzeichen getrennt) folgendes Problem auf: ist das erste Wort vollständig eingegeben, wird das Leerzeichen zwischen den beiden Wörtern ausgeblendet.

Beispiel:

Eingabe:           Anzeige der Vorschläge:
Amorphe            Amorphes Silicium
Amorphes           AmorphesSilicium          // das Leerzeichen verschwindet
Amorphes_          Amorphes Silicium         // _ soll ein Leerzeichen sein
Amorphes S         Amorphes Silicium

Hat jemand eine Idee, was mit dem Leerzeichen passiert?

Die ganze DB-Abfrage:

$suggest = sprintf("SELECT ausgabe, anzeige FROM suggest WHERE anzeige LIKE '%s%%' ORDER BY anzeige LIMIT $limit;", mysql_real_escape_string($eingabe));  
$suggest = mysql_query($suggest);  
while ($antwort=mysql_fetch_array($suggest))  
{  
  $anzeige = $antwort["anzeige"];  
  $ausgabe = $antwort["ausgabe"];  
  if(strcasecmp($eingabe, $anzeige) != 0)  
  {  
    $anzeige_fett = preg_replace("/($eingabe)/i", "<strong>$1</strong>", $anzeige, 1);  
    $liste .= '  <li><a id="'.htmlspecialchars($ausgabe).'" onclick="insert_eingabe(id, \''.$txt_id.'\', \''.$div_id.'\')" href="#">&nbsp;'.$anzeige_fett.'</a></li>';  
    $count++;  
  }  
}

Wenn ich mir die Ausgabe in Firebug anschaue, dann ist das Leerzeichen aber immer vorhanden, nur in der Vorschlagsliste sieht man es nicht mehr.

Firebugausgabe:

<li><a id="&quot;Amorphes Silicium&quot;" onclick="insert_eingabe(id, 'eingabe', 'suggests')" href  
="#">&nbsp;<strong>Amorphes</strong> Silicium</a></li>