Seite 1 von 1

Eigener Smilie parser funktioniert nicht ganz

Verfasst: 22.01.2008 19:28
von terminatorx120
Hi,
ich bastel gerade an einem kleinem CMS, ich baue gerade Smileys ein, aber leider funktioniert das nicht ganz, entweder kommt eine Fehlermeldung (das preg_replace nicht korrekt ausgrdührt werden konnte) oder die ganze Seite ist mit den Smiley und dem Code versehen...

habe auch schon Quelltext von phpBB2 angesehn...ohne Erfolg.

Vielleicht könnt ihr mir helfen:

Code: Alles auswählen

Warning: preg_replace() [function.preg-replace]: Compilation failed: unmatched parentheses at offset 1 in D:\xampp\htdocs\cms\functions.php on line 85
Quelltext:

Code: Alles auswählen

function get_smilies($text){
include('./connect.php');
$sql = "SELECT *
FROM ".$prefix."smilies";
 if (!($result = mysql_query($sql))){
  die('Smilie Abfrage gescheitert! '.mysql_error());
 }
 echo $sql;
 $i = 0;
 $smilie_find = array();
 $smilie_replace = array();
 while($row = mysql_fetch_assoc($result)){
 $smilie_find[$i] = $row['smilie_code'];
 $smilie_replace[$i] = $row['smilie_img'];
 print_r($smilie_find[$i]);
 $text = preg_replace('|'.$smilie_find[$i].'|', '<img src="images/smilies/'.$smilie_replace[$i].'" />', $text);
 $i++; 
 }
 
return $text;
}
:(


MySQL-Datenbank sieht so aus:

Code: Alles auswählen

+-----------------------------------------
smilie_id--------smilie_img----------smilie_code
-----1--------------^^.gif----------------:D
-----2 ---------icon_wink.gif-------------;)
-----------------------------------------

Verfasst: 22.01.2008 20:04
von gn#36
Klammern haben eine spezielle Bedeutung in einem regulären Ausdruck.
Wenn die in Smilies vorkommen musst du die vor dem benutzen in preg_replace mit Fluchtzeichen versehen:

Code: Alles auswählen

$smilie_find[$i] = str_replace(')', '\)', $smilie_find[$i]);
Das musst du mit allen Zeichen mit spezieller Bedeutung machen wenn du preg_replace benutzen willst. IMHO ist das aber sowieso überflüssig, da du genau so gut das viel schnellere str_replace nutzen kannst, schließlich stehen die Smilies ja genau so in der DB wie du sie ersetzt und du nutzt keinen Teil des ursprünglichen Texts weiter so dass reguläre Ausdrücke irgendwelche Vorteile hätten (wie das z.b. bei dem ersetzen von bbCodes wäre).

Verfasst: 22.01.2008 23:01
von terminatorx120
Danke :D