Problem mit nl2br(htmlentities)

Zimtgruen

Erfahrenes Mitglied
Ich habe mir ein eigenes Gästebuch erstellt und damit auch Zeilenumbrüche dargestellt werden, beim eintragen in die datenbank folgende Funktion verwendet: nl2br(htmlentities)

Die Zeilenumbrüche werden auch alle dargestellt, aber nicht die Umlaute und zwar erscheint statt den umlauten dann einfach
Code:
ö
z.b., dann hab ich in den htmlquelltext geschaut und herausgefunden, dass die Umlaute so drin stehen:
Code:
ö

kann mir einer sagen woran das liegt, was ich da machen kann.
 
Das kommt daher, da du die Einträge irgendwie doppelt mit htmlentities oder ählichem konfrontierst ...
Darum wird aus dem eigentlichen & von ö ein & und dadurch dann ö :)

Kann das sein, dass du die Funktion einma beim schreiben in die Datenbank und einma beim auslesen verwendest?

Ansonsten post ma deinen Code, den du zum Eintragen verwendest
 
das ist wahr, aber jetzt hab ich die funktion beim auslesen rausgenommen und jetzt stellt er zwar die umlaute richtig dar, aber nicht mehr die zeilenumbrüche

Eintragen in die datenbank
Code:
$eintrag = "INSERT INTO gb
(author, date, email, homepage, text)

VALUES
('".mysql_real_escape_string($author)."', '".time()."', '<a href=\"mailto:".mysql_real_escape_string($email)."\">".mysql_real_escape_string($email)."</a>', '<a href=\"".mysql_real_escape_string($hp)."\" target=\"_new\">".mysql_real_escape_string($hp)."</a>', '".nl2br(htmlentities(mysql_real_escape_string($text)))."')";



$eintragen = mysql_query($eintrag);

if($eintragen == true)
   {
   echo "Danke f&uuml;r deinen G&auml;stebucheintrag!<br>Du wirst weitergeleitet <meta http-equiv=\"refresh\" content=\"3; URL=gb.php\">";
   }
else
   {
   echo mysql_error() . "\n";
   }


Auslesen aus der Datenbank
Code:
$gb1 = "SELECT author, date, email, homepage, text FROM gb ORDER BY date DESC";
$gb2 = mysql_query($gb1);
	while($array = mysql_fetch_array($gb2))
	{
echo "<table class=\"gb\" style=\"border-collapse:collapse\" width=\"500px\">";
echo "<tr class=\"gb2\"><td><b>".$array["author"]."</b> am  ".date("d.m.Y",$array["date"])."<br>";
echo "".$array["homepage"]." &nbsp ".$array["email"]."</td></tr>";
echo "<tr class=\"gb\"><td>".($array["text"])."</td></tr>";
echo "</table><p>";
}

Vorher war vor dem array text noch so ne funktion
 
Da du die Daten ja aus einer MySQL Datenbank beziehst vermute ich mal, dass du den falschen MySQL Zeichensatz nutzt.

Ich empfehle immer utf8_unicode_ci
 
Es reicht eigentlich, die Daten nur für jeweils die Sprache vorzubereiten, in der sie unmittelbar verwendet werden sollen. Wenn du also Daten in einer MySQL-Abfrage verwenden möchtest, ist es mysql_real_escape_string(). Wenn du sie in einem HTML-Dokument ausgeben möchtest, ist es htmlspecialchars()/htmlentities(). Und genau erst dann.
Das heißt, für die MySQL-Abfrage nur mysql_real_escape_string() und für die Ausgabe in HTML später erst htmlspecialchars()/htmlentities() (Gleiches gilt für nl2br()).

Da das aber vermutlich nicht das eigentliche Problem löst: Wo kommen denn die Daten überhaupt her? Wurden sie vielleicht schon vorher durch htmlentities() geschickt?
 
die kommen über das formular:
Code:
<font size="3">Neuen Eintrag hinzuf&uuml;gen</font><p>

<form action="newgb2.php" method="post">

<table style="border-collapse:collapse">
<tr>
<td  class="t1" valign="top"><font face="verdana" size="1">Name</td> 
<td  class="t1" valign="top"><font face="verdana" size="1"><input type="text" name="author" size="31"></td> 
</tr>

<tr>
<td  class="t1" valign="top"><font face="verdana" size="1">Email</td> 
<td  class="t1" valign="top"><font face="verdana" size="1"><input type="text" name="email" size="31" value="@"></td> 
</tr>

<tr>
<td  class="t1" valign="top"><font face="verdana" size="1">Homepage</td> 
<td  class="t1" valign="top"><font face="verdana" size="1"><input type="text" name="homepage" size="31" value="http://"></td> 
</tr>



<tr>
<td  class="t1" valign="top"><font face="verdana" size="1">Eintrag</td> 
<td  class="t1" valign="top"><font face="verdana" size="1"><textarea name="text" cols=45 rows=20></textarea></td> 
</tr>


<tr>
 <td  class="t1" align="center"><input type="submit" value="Senden"></td>
 <td  class="t1" align="center"><input type="reset" value="L&ouml;schen"></td>
</tr>
</form>
</table><p>

und werden dann auf die nächste seite geschickt:
Code:
$author = $_POST["author"];
$email = $_POST["email"];
$hp = $_POST["homepage"];
$text = $_POST["text"];
 
das ist wahr, klingt logisch.
das heißt ich muss die zeichen schon so formatiert in die variablen geben, richtig?
und wie mach ich das?
 
Nein, eher das Gegenteil. Das derzeitige Verhalten kann ich mir nur so erklären, dass im Formular bereits explizit ein &ouml; eingetragen wird. Anderenfalls würde es ja nicht so ankommen.
Oder aber es wird bereits irgendwo durch ein htmlspecialchars() oder htmlentities() verändert.
 
hm dass das schon so eingegeben wird kann ich mir nicht vorstellen und als ich das getestet hab, hab ich ja auch ganz normal die umlaute eingegeben

und alle codes, die ich habe, um das ganze in die datenbank einzutragen, hab ich hier glaub ich jetzt auch angegeben
 
Zurück