Textarea Inhalt korrekt in Datenbank speichern

Steusi

Nasenbär
Hallo Leute, wie bekomme ich es gelöst, den Textarea-Inhalt sauber abzuspeichern?

Ihr habt doch bestimmt ein paar nützliche Funktionen für mich auf Lager oder?

Momentan klappt es bei mir leider noch nicht
PHP:
$kommentar = addslashes(htmlentities(trim($_POST['kommentar'])));

Ich gebe beispielsweise folgendes ein:
Test
Test 2\n\r 'OR' = Ø
\r\t Test
In der DB landet aber leider nur:
Test
Test 2\\n\\r \'OR\' = Ø
\

Habt ihr ein paar Tipps für mich? Danke
 
Zuletzt bearbeitet:
Warscheinlich ist auf dem Server magic_quotes aktiv. Dadurch führt der Server addslashes automatisch auf alle Variablen aus, die per GET, POST order COOKIE kommen.

htmlentities() ist im übrigen meist besser wenn man das erst bei der Ausgabe ausführt. Das macht auch das durchsuchen der Datenbank einfacher.
 
Oh, stimmt die Suche kann es erschweren. Dachte nur das MySQL Probleme mit den Sonderzeichen haben wird?

Also, wozu brauch ich htmlentities dann? Wenn es ordentlich schon in der DB steht brauche ich es auch nicht mehr umwandeln oder?
So sieht es bei mir momentan aus:
Code:
htmlentities($_POST['kommentar'],ENT_QUOTES,"UTF-8")


magic_quotes Informationen vom Server
Code:
magic_quotes_gpc	On	On
magic_quotes_runtime	Off	Off
magic_quotes_sybase	Off	Off

Das komisch ist, lasse ich die Variabele $kommentar direkt ausgeben ist alles OK, nur in der Datenbank kommt es nicht ordentlich an, er bricht immer nach einem bestimmten Zeichenzeitpunkt ab :suspekt: Gibt es eine Längenbeschränkung?


// EDIT:
@ ZodiacXP, genau das mit UTF-8 hab ich auch schon mitbekommen, DANKE trotzdem.
Und du hast recht, die Spalte war auf VarChar formatiert, und jetzt ist es TEXT (mit noch mehr erlaubten Zeichen) nun steht schon mal alles drin.
 
Zuletzt bearbeitet:
Hi,

Überleg Dir doch mal, warum Du überhaupt Zeichen in Strings ersetzen oder maskieren willst. Du musst Variablen entsprechend dem Kontext, in den Du sie überführen willst, behandeln. Was sollen HTML-Entitäten in einer Datenbank?

Auf Strings, die Du in einer MySQL-Datenbank speichern willst, wendest Du [phpf]mysql_real_escape_string[/phpf] an, da diese Funktion Zeichen maskiert, die in MySQL eine besondere Bedeutung haben. Wenn Du Daten aus der DB in einem HTML-Dokument ausgeben willst, musst Du die Zeichen umwandeln, die in HTML eine besondere Bedeutung haben, also nimmst Du hier [phpf]htmlspecialchars[/phpf].

Da mysql_real_escape_string unter anderem auch Hochkommata maskiert, musst Du die Backslashes, die eventuell durch magic_quotes_gpc gesetzt sind, vorher mit [phpf]stripslashes[/phpf] wieder entfernen. Abfragen kannst Du die Einstellung mit [phpf]get_magic_quotes_gpc[/phpf].

LG
 
Zurück