• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Steuerzeichen im mysql-Feld werden mit angezeigt

goxyhey

Neues Mitglied
Hallo,

mein Problem ist folgendes:

Ich speichere längere Kommentar-Daten in einem longtext-Feld in einer mysql-Datenbank ab.
Beim Aufruf der Daten erscheinen in diesem Feld neben dem erfassten Text noch Steuerzeichen, die ich natürlich nicht sehen möchte.
Beispiel: <br /> für den Zeilenwechsel.
(strip_tags, stripslashes hilft hier nicht weiter)

Wie kann ich in der Anzeige diese Steuerzeichen unterdrücken?



goxyhey
 
Steuerzeichen ist das falsche Wort. Das sind HTML-Elemente. Die Frage ist, wie diese erzeugt werden. Nutzt du irgendwo eine Funktion wie nl2br?
 
Beim Aufruf der Daten erscheinen in diesem Feld neben dem erfassten Text noch Steuerzeichen, die ich natürlich nicht sehen möchte.

Was genau meinst du damit?
A) Wenn du dir die Daten in phpmyadmin ansiehst
B) Wenn du die gespeicherten Daten wieder in ein Formularfeld oder ähnliches lädst und anzeigst

Falls du Punkt A meinst, hast du eigentlich alles richtig gemacht, denn diese Sachen müssen mit gespeichert werden... Sonst wirst du beim anzeigen der Daten alle Formatierungen verloren haben.


Normalerweise macht man es so:

Speichern in die Datenbank:

$db_input = nl2br($textfeld);
PHP: nl2br - Manual


Daten aus der Datenbank zurück ins Textfeld

$ausgabe = str_replace("\n", "<br>",$row['dbausgabe']);
PHP: str_replace - Manual
 
Nein, die HTML-Elemente zur Generierung eines Zeilenumbruchs müssen nicht mitgespeichert werden. Ob es sinnvoll ist, sie mitzuspeichern, hängt von der konkreten Umsetzung ab; das heißt vor allem davon, in welchem Format die Daten gespeichert werden sollen. Wenn das Format HTML ist – okay. Wenn das Format BBCode oder unformatierter Text ist – nicht okay.

HTML ist eher ein Ausgabeformat als ein Speicherformat.

Üblicherweise ist nl2br eine Funktion, die nur bei Ausgabe zwischen Escaping und echo/print zum Einsatz kommt.

Genau das dürfte hier auch das Problem sein. Die Daten werden vor Ausgabe escapet (Stichwort XSS-Schutz), was die <br />-Tags zu &lt;br /&gt; macht.

Das Problem besteht nicht, wenn die Tags nicht mit in die DB geschrieben werden, sondern Zeilenumbrüche einfach als \n abgelegt werden.

PHP:
$dataFromDb = <<<EOT
Dies

ist

ein Test. Und 3 < 4.
EOT;

$dataFromDb = htmlspecialchars($dataFromDb, ENT_QUOTES, 'UTF-8');
$dataFromDb = nl2br($dataFromDb);

echo $dataFromDb;

Code:
Dies<br />
<br />
ist<br />
<br />
ein Test. Und 3 &lt; 4

Am Rande: Wenn du vor dem Schreiben in die Datenbank nl2br ausführst und dann bei der Ausgabe noch \n durch <br /> ersetzt, verdoppelst du die Zeilenumbrüche.
 
Zurück
Oben