Tags mit str_replace ersetzen funktioniert nicht ...

FP4Lisa

Mitglied
Hallo ...

ich bin nun schon den ganzen Abend am probieren und googln, aber ich bekomme es nicht hin. Sicher sehe ich einfach den Wald vor Bäumen nicht. Wäre schön denn mir wer hilft.

Also ich möchte in einem string, den ich aus der mysql hole neben den Smilies und Badwords auch die < > durch Gifs ersetzen. Smilies und Badwords gehen, aber < > nicht.

Ich habe einmal die Funktion zensur:
PHP:
            <?php ###############ZENSIEREN#########################
                    function zensieren($zensur) 
                            {
                            // Mysql Konfiguration abrufen
                            include ("sqlkonfiguration.php");
                            mysql_select_db($hp); //Datenbank ansprechen
                    
                    // UNERLAUBTE AUSDRÜCKE ERSETZEN
                                $sqlzensur = "SELECT * FROM ?";
                            
                                $ergebniszensur = mysql_query($sqlzensur) or die("Error: " . mysql_error());
                                $gefundenzensur = mysql_num_rows($ergebniszensur);
                                while($datenzensur = mysql_fetch_array($ergebniszensur))
                                            {
                                            $wort = $datenzensur["Wort"];
                                            $neu = $datenzensur["Neu"];
                                            $zensur = str_replace($wort,$neu,$zensur);
                                            }
                    
                    // SMILEYS DURCH BILDER ERSETZEN
                                $sqlsmile = "SELECT * FROM ?";
                             
                                $ergebnissmile = mysql_query($sqlsmile) or die("Error: " . mysql_error());
                                $gefundens = mysql_num_rows($ergebnissmile);
                                while($datensmile = mysql_fetch_array($ergebnissmile))
                                            {
                                            $zeichen = $datensmile["Zeichen"];
                                            $bild = $datensmile["Bild"];
                                            $zensur = str_replace($zeichen,'<image src="de/sm/'.$bild.'">',$zensur);
                                            }

                    // tags durch Bilder ersetzen

                                  $zensur = str_replace('<','<image src="de/sm/tagauf.gif">',$zensur);

                                  $zensur = str_replace('>','<image src="de/sm/tagzu.gif">',$zensur);


                                  return $zensur;
                    }
            ?>

... und dann ist da der Teil, wo ich die Zensur anwende:

PHP:
                                $zensur = stripslashes($datenbeitraege->Beitrag);
                                $beitrag = nl2br(zensieren($zensur));

Ich habe keine Ahnung wo ich noch suchen könnte ...
 
Wenn ich htmlspecialchars() verwende dann sortiert er meine formatierten Smilies auch gleich mit aus. Setze ich es vor die Zensur, dann tut sich wieder garnichts. Setze ich es in die zensur an den anfang dann tut sich genauso nichts. Irgendwas stimmt da nicht.
Denn abgesehen vom Nutzen oder nicht Nutzen müsste er das ja umbauen, macht er aber nicht.

*ganzlautAAAAAHRGSschrei*
 
mach es doch so das du für die Smilies eine Extra funktion...

und dann beim str_replace machst du dann bei den die gesucht werden auch htmlspecialchars()-Funktion)

dann sollte das gehen ;) so mache ich das zumindest immer und gab bisher nie probs...

MfG Mathis
 
Ich seh grad nicht, was da schief laufen könnte, kann dir aber vielleicht ein paar Denkanstösse geben, wie das zu regeln wäre:

PHP:
//Textüberprüfung
$orginal = array("<", ">", "ä", "ö", "ü", "\r\n", "\r", "\n", "Ä", "Ö", "Ü", "[ b ]", "[ /b ]", "[ i ]", "[ /i ]", "[ u ]", "[ /u ]", "'", "\"");
$mutate = array("&lt;", "&gt;", "&auml;", "&ouml;", "&uuml;", "&nbsp;<br />", "&nbsp;<br />", "&nbsp;<br />", "&Auml;", "&Ouml;", "&Uuml;", "<b>", "</b>", "<i>", "</i>", "<u>", "</u>", "&lsquo;", "&ldquo;");

for($i=0; $i<count($original); $i++)	{
	$text = str_replace($orginal[$i], $mutate[$i], $text);
}
Allerdings gibt es dafür, wie Gumbo schon erwähnt hat, extra PHP-Funktionen wie htmlspecialchars.

PHP:
#Smiley - Hash erstellen (Smileys liegen im Verzeichnis)
$fh = opendir("gfx/smileys/");
while($file = readdir($fh))	{
	if(!preg_match("/^\.+$/", $file)) {
		$exploded = explode(".", $file);
		$smileys[$exploded[0]] = $file;
	}
}

closedir($fh);

foreach($smileys AS $name => $path)	{
	$text = str_replace(":".$name.":", "<img src=\"gfx/smileys/".$path."\">", $text);
}

Vielleicht kannst du ja damit was anfangen.
 
Zurück