smileyscript läuft nicht :(

Skorpiona

Grünschnabel
Hallo zusammen,

für mein GB hab ich ein smileyscript gemacht, aber bei ner speziellen Zeile wird immer folgende Fehlermeldung angezeigt

Warning: Compilation failed: unmatched parentheses at offset 2 in /www/htdocs/v075127/guestbook2.php on line 272

und der Zeile steht dieser code:

PHP:
if ( preg_match( '/'.addslashes( $smiley ).'/i', $text ) ) {

Ich weiß leider nicht wo das Problem ist und hab schon seit Tagen hin und her überlegt

Und das hier ist der gesamte Code

PHP:
<?php


//$query = "SELECT * FROM $table ORDER BY datum DESC LIMIT 0,50"; //hier kann die anzahl der ausgegebenen einträge festgelegt werden


$query = "SELECT DATE_FORMAT(g.datum, '%d.%m.%Y') AS fdatum, g.* FROM $table g ORDER BY datum DESC LIMIT 0,50";

//begonnen wird hier bei eins und mit 50 endet es
$result = mysql_query($query);

// definiere smilie array 
$smilies =array(	":-D"			=>		"happy.gif",
					":huh:"			=>		"huh.gif",
					":chinese:"		=>		"chinese.gif",
																	        ":-p"	=> "tongue.gif",
					":bs:"			=>		"bigsmile.gif",
					":angry:"		=>		"angry.gif",
					":beer:"		=>		"beer.gif",
					":frightened:"	=>		      "frightened.gif",
					":glases:"		=>		"glasses.gif",
										           ":sick:"		=>	"sick.gif",
					":sleep:"		=>		"sleep.gif",
					":cool:"		=>		"cool.gif",
					":cybog:"		=>		"cyborg.gif",
					":smile:"		=>		"smile.gif",
					":smurf:"		=>		"smurf.gif"
				);
if( mysql_num_rows( $result ) ) {

	// tabelle bauen
	echo "<table cellspacing=2 cellpadding=0 width=500 border=0>";
	while( $row = mysql_fetch_array( $result ) ) {
		echo "<tr>
			<td><b><a href=mailto:".$row['email'].">".$row['name']."</a></b></td>
			<td align=right>".$row['fdatum']."</td>
		</tr>";
		$text = $row['text'];
		// überprüfe text ob smilies vorhanden sind
				foreach ( $smilies AS $smiley => $smileygif ) {
			// hier ist der regex.
						if ( preg_match( '/'.addslashes( $smiley ).'/i', $text ) ) {
				$text = str_replace( "$smiley", "<img src=\"./smiley/$smileygif\" border=\"0\" alt=\"\">", $text );
			}
		}
		echo "<tr><td colspan=2>".nl2br($text)."</td></tr>";
		echo "<tr><td colspan=2><table width=100% cellspacing=0 cellpadding=0 border=0></td></tr>";
		if ( !empty( $row['hp'] ) ) {
			echo "<td><a href='".$row['hp']."' target=new>".$row['hp']."</a></td>";
		} else {
			echo "<td>&nbsp;</td>";
		}
		echo "<td><a href='#top'>top</a></td></tr></table></td></tr>";
		echo "<tr><td colspan=2>&nbsp;</td></tr>";
	}
	flush();
} else {
  echo "<b>Es sind noch keine Eiträge vorhanden!</b>"; //text der angezeigt wird, falls keine einträge vorhanden
}
?>

Die smileys sind auch trotz /i case sensitive :sad:
 
hallo

ich würde das in eine funktion schreiben.
so bin ich das array problem los geworden.

PHP:
function replace_text($text){
    $text = str_replace(":-:","<img src=\"image/gb_1.gif\" border=\"0\" width=\"24\" height=\"23\" alt=\":-:\">",$text);
    $text = str_replace(":w:","<img src=\"image/gb_2.gif\" border=\"0\" width=\"19\" height=\"19\" alt=\":w:\">",$text);
  return $text;
}

das ist zwar nur ein kleiner aus schnitt.
man kann sie unendlich erweitern.

anschliessend in das script wo man es braucht per
include einbeziehen.

viel spass

euer SaTaN
 
ich würds trotzdem mit array machen da du dir so viel platz sparst

zum problem: dein regulärer ausdruck ist möglicherweiße falsch, zeig mal nen beispiel wp er den fehler ausgibt, also den regulären ausdruck, den er dabei verwendet
 
Reguläre Ausdrücke sind ausserdem _viel_ langsamer als ein str_replace(). Wenn ich sowas sehe, dreht sich mir immer der Magen um.
 
das stimmt allerdings, für nen einfaches smilie-replace-script sollte man wirklich lieber str_replace nehmen (was meines wissens auch mit arrays funktioniert), regex wirklich nur bei ausgefallenen suchmustern wie bei emailaddressen oder webaddressen verwenden.

versuchs mal so:

$smilies = array (
":-)" => "grins",
":-(" => "heul",
";-)" => "zwinker"
)

$out = str_replace(array_keys($smilies),array_values($smilies),$str);

das sollte funktionieren, ist schnell und sehr kurz gefasst, kürzer gehts glaube sogar gar nicht.
 
Zuletzt bearbeitet von einem Moderator:
Zurück