Dennis: mysql_real_escape_string + htmlspecialchars

Beitrag lesen

Hi blaschi,

[…] in eine Datenbank (MySQL) einpflegen will, fange ich ihn als erstes mit
htmlspecialchars ab.

Du kannst einen Text nicht „abfangen”, was du hier machst ist ein Escapen des Textes für einen HTML-Kontext.

Wenn ich ihn aber daraufhin nochmal mit mysql_real_escape_string abfange,
werden meine Anführungszeichen doppelt "entschärft", so dass ich bei der ausgabe des datensatzes folgendes bekomme:

___________________________________________
Dies sind „Sonderzeichen“
<?php echo 'Dies ist PHP Code'; ?>
___________________________________________

Nein, das ist sicherlich nicht die Ausgabe von mysql_real_escape_string(htmlspecialchars($text)), zumindest nicht dann, wenn du es so gemacht hast, wie du es hier dargestellt hast. Dann müsste die Ausgabe (in den Quelltext gucken!) so aussehen:

Dies sind „Sonderzeichen”
&lt;?php echo 'Dies ist PHP Code'; ?&gt;

Die Funktion htmlspecialchars() wandelt standardmäßig Größer- und Kleiner-Zeichen, sowie doppelte Anführungszeichen (die hier: ") in ihre entsprechenden HTML Entities um. mysql_real_escape_string() escaped Anführungszeichen, damit diese im SQL-Query korrekt maskiert sind.

Du solltest htmlspecialchars() *nicht* benutzen, wenn du Daten in die Datenbank speicherst (sehr wohl jedoch mysql_real_escape_string()). Du sollst htmlspecialchars() bei der Ausgabe der Daten (als HTML) nutzen.

Nutze ich aber htmlspecialchars nicht, so wird der eingegebene php-code bei der ausgabe ausgeführt.

Nein, warum sollte der PHP-Code ausgeführt werden? Dazu gibt es keine Veranlassung… Du nutzt doch hoffentlich nirgendwo eval() oder?

Viele Grüße,
  ~ Dennis.