Eigener Smilie parser funktioniert nicht ganz

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
Antworten
Benutzeravatar
terminatorx120
Mitglied
Beiträge: 214
Registriert: 19.02.2007 22:25
Wohnort: Barmstedt
Kontaktdaten:

Eigener Smilie parser funktioniert nicht ganz

Beitrag 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-------------;)
-----------------------------------------
MfG
TerminatorX120
http://www.KeepGaming.de
Benutzeravatar
gn#36
Ehrenadmin
Beiträge: 9313
Registriert: 01.10.2006 16:20
Wohnort: Ganz in der Nähe...
Kontaktdaten:

Beitrag 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).
Begegnungen mit dem Chaos sind fast unvermeidlich, Aber nicht katastrophal, solange man den Durchblick behält.
Übertreiben sollte man's im Forum aber nicht mit dem Chaos, denn da sollen ja andere durchblicken und nicht nur man selbst.
Benutzeravatar
terminatorx120
Mitglied
Beiträge: 214
Registriert: 19.02.2007 22:25
Wohnort: Barmstedt
Kontaktdaten:

Beitrag von terminatorx120 »

Danke :D
MfG
TerminatorX120
http://www.KeepGaming.de
Antworten

Zurück zu „Coding & Technik“