Der Martin: htmlspecialchars() vs. mysql_real_escape_string()

Beitrag lesen

Hallo,

Dann solltest Du sie *beim Speichern* in der Datenbank mit den dafür vorgesehenen Funktionen kontextgerecht behandeln.
OK, nun wende ich beim Speichern mysql_real_escape_string() an.
Dann werden alle Anführungszeichen in der Datenbank mit Backslashes gespeichert.

das ist falsch. Richtig ist, dass mysql_real_escape_string() die Anführungszeichen mit Backslashes maskiert. Diese Maskierung macht mySQL aber automatisch wieder rückgängig, *bevor* die Daten in die DB eingetragen werden. Die Maskierung ist nur für die Übergabe von PHP an mySQL gedacht.

Dann solltest Du sie *beim Ausgeben* als HTML mit den dafür vorgesehenen Funktionen kontextgerecht behandeln.
OK, ich kann nun mit htmlspecialchars() alle HTML-Tags 'maskieren'. Wie bekomme ich aber nun die Backslashes vernünftig weg?

Die dürften im Normalfall gar nicht da sein.

Und warum werden solche Backslashes überhaupt in der Datenbank gespeichert? Ich dachte, die werden nur wegen dem Kontextwechsel davor gesetzt. Soll heißen, wenn ich
INSERT INTO table SET text='Hallo 'welt''
habe, müsste in der Tabelle folgendes drinstehen:
Hallo 'welt'
Warum steht da bei mir aber
Hallo 'welt'
?

Sind deine GET/POST-Daten vielleicht schon verstümmelt, wenn dein Script sie bekommt? Sind auf deinem Server bzw. in dessen PHP-Konfiguration vielleicht die bösen "magic quotes" aktiviert?

Ciao,
 Martin

--
Man gewöhnt sich an allem, sogar am Dativ.
Selfcode: fo:) ch:{ rl:| br:< n4:( ie:| mo:| va:) de:] zu:) fl:{ ss:) ls:µ js:(