Wie korrekt Anführungszeichen aus DB in Textfeld ausgeben?
snoot
- datenbank
Hio,
ich habe in einer MySQL-DB Wörter mit Anführungszeichen (Anfz.). Diese Wörter mit Anfz. sollen aus der DB in einzeilige Eingabefelder (<input type="text" ...>
) ausgegeben werden.
Die Anfz. in der DB kommen ausschließlich von mir (also keine Gefahr von Injection oder so), nur wie muss ich die Zeichen korrekt in der DB speichern, um sie dann in die Eingabefelder ausgeben zu können?
Wenn ich die Anfz. einfach als "Wort" eintrage, erhalte ich bei der Ausgabe im Textfeld: value=""Wort""
, was natürlich Unsinn ist.
Ist die einzige Möglichkeit die Anfz. in der DB mit "
anzugeben, oder gibt es andere/bessere Lösungen?
Die verwendete Kollation ist: latin1_german2_ci
Die MySQL-Version ist: 5.0.32-Debian_7etch8-log
Ist die einzige Möglichkeit die Anfz. in der DB mit
"
anzugeben, oder gibt es andere/bessere Lösungen?
Maskiere diese Strings beim Generieren der HTML-Ausgabe, also beim Einbetten in das HTML. Die üblichen Web-Programmiersprachen bieten dafür vorgefertigte Funktionen an, wie z.B. htmlspecialchars in PHP. Löse die Aufgabe auf dieser Ebene, in der Datenbank sollten und können ruhig die Rohdaten stehen.
Mathias
Alles klar @ euch beide, vielen Dank :)
Alles klar @ euch beide, vielen Dank :)
Sorry, waren ja 3 Helfer :D will ja niemanden vergessen.
magic_quotes usw. bei der Eingabe habe ich bereits berücksichtigt, danke.
Hi,
Die Anfz. in der DB kommen ausschließlich von mir (also keine Gefahr von Injection oder so), nur wie muss ich die Zeichen korrekt in der DB speichern, um sie dann in die Eingabefelder ausgeben zu können?
Ganz normal natürlich.
Wenn ich die Anfz. einfach als "Wort" eintrage, erhalte ich bei der Ausgabe im Textfeld:
value=""Wort""
, was natürlich Unsinn ist.
Natürlich.
Kodiere HTML-Sonderzeichen entsprechend, wenn du reinen Text innerhalb von HTML ausgeben willst.
Ist die einzige Möglichkeit die Anfz. in der DB mit
"
anzugeben, oder gibt es andere/bessere Lösungen?
Nein, das wäre die DDM (Dümmste Denkbare Möglichkeit).
Vernünftig wäre, die Daten zu dem Zeitpunkt einer Kodierung zu unterziehen, zu dem diese notwendig wird. Und das ist der Moment der Ausgabe.
MfG ChrisB
echo $begrüßung;
Die Anfz. in der DB kommen ausschließlich von mir (also keine Gefahr von Injection oder so),
Es ist im Prinzip egal, ob es sicherheitstechnisch relevant ist oder nicht.
nur wie muss ich die Zeichen korrekt in der DB speichern, um sie dann in die Eingabefelder ausgeben zu können?
Stets kontextgerecht. Wenn du etwas in Richtung HTML ausgibst, beachtest du die HTML-Regeln. Wenn du etwas in ein SQL-Statement einfügst, beachtest du dessen Regeln. Du beachtest immer nur die Regel für den aktuelen Kontext und nicht das was irgendwann viel später mal erfolgen soll. Denn wenn du bereits in die Datenbank HTML-gerechte Notierungen schreibst, kannst du darauf keine Stringfunktionen mehr sinnvoll anwenden, beispielsweise weil aus dem einen Zeichen < plötzlich 4 werden < und so weiter.
Ist die einzige Möglichkeit die Anfz. in der DB mit
"
anzugeben, oder gibt es andere/bessere Lösungen?
PHP kennt htmlspecialchars() für den HTML-Kontext, andere Sprachen bringen sicher ihre eigenen Funktionen mit.
Für den SQL-String-Kontext gibt es mysql_real_escape_string() als PHP-Funktion und gleichnamig auch als MySQL-API-Funktion. (Beachte unter PHP noch das Feature Magic Quotes, das es zu deaktivieren gilt, wenn man sich selbst um die kontextgerechte Behandlung kümmert.)
echo "$verabschiedung $name";