Ragna: Probleme mit <br /> und textarea...

Beitrag lesen

مرحبا

ok, nachtrag...das ganze scheint am strip_tags zu hapern...das habe ich nach der Umwandlung reingemacht, um alle html-tags rauszuhauen. Wenn ich das lösche, wird auch ein <br /> vom TinyMCE selber in die DB geschrieben...

Wie kommen diese HTML-Tags in die Datenbank?
Userkommentare kommen für gewöhnlich als reiner Text mit Zeilenumbrüchen bei dir an, wann genau kommt das HTML-Zeugs in deine Kommentare?

mfg

Es handelt sich hier um das Backend für eine Webseite, bei der User selber den Inhalt der Seiten pflegen kann. SOmit sollten auch Gestalltungselemente wie Absatz, Fettschrift, Schrägschrift und Unterstriche möglich sein. Diese werden über den TinyMCE eingefügt und dieser gibt den Code mit aus. Dieser wird dann in BBCOde gewandelt und in die DB geschrieben...

Wie gesagt, das klappt alles recht gut, nur der normale Zeilenumbruch macht Ärger. Und wenn ich nl2br verwende, bekomme ich Probleme mit den Absätzen, da nach jedem Ändern neue hinzugefügt werden...

Ich poste hier noch mal den ganzen Code, vielleicht sieht man es dann besser:

Funktion html-->bbCode

  
<?php  
  
function html_bbcode($text)  
{  
    $text = str_replace("<br />", "\r\n", $text);  
    $text = str_replace("<p>&nbsp;</p>", "", $text);  
    $text = preg_replace('#\<strong\>(.*)\</strong\>#isU', "[b]$1[/b]", $text);  
    $text = preg_replace('#\<em\>(.*)\</em\>#isU', "[i]$1[/i]", $text);  
    $text = preg_replace('#\<p\>(.*)\</p\>#isU', "[p]$1[/p]", $text);  
    $text = preg_replace('#\<span style="text-decoration: underline;"\>(.*)\</span\>#isU', "[u]$1[/u]", $text);  
    $text = preg_replace('#\<span style="text-decoration: underline; color: \#ffff00;">(.*)\</span\>#isU', "[u_gelb]$1[/u]", $text);  
  
	$text = strip_tags($text);  
  
    //Rückgabe  
    return $text;  
}  
  
?>  

und wieder zurück

  
<?php  
  
    function bbcode_html($text)  
    {  
        $text = htmlentities($text, ENT_QUOTES, "UTF-8");  
  
        # Formatierungen  
  
        $text = str_replace('[br]', "<br />", $text);  
        $text = preg_replace('#\[b\](.*)\[/b\]#isU', "<strong>$1</strong>", $text);  
        $text = preg_replace('#\[p\](.*)\[/p\]#isU', "$1", $text);  
        $text = preg_replace('#\[i\](.*)\[/i\]#isU', "<em>$1</em>", $text);  
        $text = preg_replace('#\[u_gelb\](.*)\[/u\]#isU', "<span style=\"text-decoration: underline; color: #ffff00;\">$1</span>", $text);  
  
        $text = preg_replace('#\[color=(.*)\](.*)\[/color\]#isU', "<span style=\"color: $1\">$2</span>", $text);  
        $text = preg_replace('#\[u\](.*)\[/u\]#isU', "<span style=\"text-decoration: underline;\">$1</span>", $text);  
  
        # Links  
        $text = preg_replace('#\[url\](.*)\[/url\]#isU', "<a href=\"$1\">$1</a>", $text);  
        $text = preg_replace('#\[ url=(.*)\](.*)\[/url\]#isU', "<a href=\"$1\">$2</a>", $text);  
  
        # Zitate  
        $text = preg_replace('#\[quote\](.*)\[/quote\]#isU', "<div class=\"zitat\">$1</div>", $text);  
  
        return($text);  
    }  
  
?>  

Und hier wird das ganze im Backend ausgegeben:

  
 <?php  
  
    //Funktionsaufruf html ==> bbcode  
    $text = bbcode_html($datensatz["text"]);  
  
    // ID speichern  
    $ueber_mich_id_ori = $datensatz["id"];  
  
     echo '<textarea name="ueber_mich_text_de" class="admin_gross">';  
  
        echo nl2br($text_de);  
  
     echo '</textarea>';  
  
?>  

Hier wird das ganze dann in die DB geschrieben:

  
//Funktionsaufruf html ==> bbcode  
$ueber_mich_ueberschrift_de = html_bbcode($_POST["ueber_mich_ueberschrift_de"]);  
$ueber_mich_ueberschrift_pl = html_bbcode($_POST["ueber_mich_ueberschrift_pl"]);  
$ueber_mich_text_de = html_bbcode($_POST["ueber_mich_text_de"]);  
$ueber_mich_text_pl = html_bbcode($_POST["ueber_mich_text_pl"]);  
  
mysql_query("SET NAMES 'utf8'");  
  
$mysql_aendern = "UPDATE  
                    ueber_mich_text  
                  SET  
                    ueber_mich_ueberschrift_de = '" . mysql_real_escape_string($ueber_mich_ueberschrift_de) . "',  
                    ueber_mich_ueberschrift_pl = '" . mysql_real_escape_string($ueber_mich_ueberschrift_pl) . "',  
                    ueber_mich_text_de = '" . mysql_real_escape_string($ueber_mich_text_de) . "',  
                    ueber_mich_text_pl = '" . mysql_real_escape_string($ueber_mich_text_pl) . "'  
                  WHERE  
                    ueber_mich_id = '" . intval($_POST["ueber_mich_id_ori"]) . "'";  
  
$ergebnis = mysql_query($mysql_aendern);  
  
$num = mysql_affected_rows();  

Was mir gestern aufgefallen ist: Wenn ich <br /> in der html-bbcode-Funktion in [br] umwandel und dann alle html-Tags via strip_tags rausschmeisse, [br] dann wieder in <br /> wandel und es in die DB schreibe, dann funzt es auch im textarea-Feld. Wenn ich aber [br] erst in der Funktion umwandel, welche den BBCode wieder in HTML wandelt (also wenn das ganze aus der DB gelesen wird), dann funzt das nicht mehr...

Ich hoffe ihr habt jetzt alle infos die ihr braucht...

besten dank schon mal bis hier hin...

Ragna