Peter: Ausgae wird mit \" dargestellt

Mohoin!!!

ich habe da mal ein kleines Verständnis-Prolemchen.

Und zwar schreibe ich den Inhalt eines Textfeldes in eine Datenank:
[...
$text = mysql_real_escape_string($text);
$text=ereg_replace("\n", "<br>", $kommentar);
mysql_query("INSERT INTO test (text) VALUES ("$text");
...]
Wenn ich im Text die sogenannten Gänsefüßchen verwende, wird in die Datenbank ein Slasch davor eingetragen: (mein "text" für Dich = mein "Text" für Dich).

Wenn ich also nun den Text wieder ausgeben möchte, werden die Slasch´s natürlich mit ausgegeben.
[...
$text=nl2br($text);
echo"$text";
...]

Muss ich jetzt bei der Eingabe etwas ändern, oder aber bei der Ausgabe?

Und eigentlich noch was viel wichtiger - Was muss ich ändern?

Gruß an alle die helfen

  1. echo $begrüßung;

    Und zwar schreibe ich den Inhalt eines Textfeldes in eine Datenank:
    $text = mysql_real_escape_string($text);

    Das ist notwendig, um einen String regelgemäß in einen SQL-String-Kontext zu bringen.

    $text=ereg_replace("\n", "<br>", $kommentar);

    Das allerdings ist eine Behandlung für den Kontext HTML und solcherart vorbehandelte Werte in eine Datenhaltung zu schreiben ist nicht unproblematisch. Wenn sich später mal der Ausgabekontext ändert oder einer hinzukommt hat man un- oder schlecht brauchbare Daten. Im einfachsten Fall muss man sie erst wieder zurückwandeln und dann neu behandeln. Auch für die Stringverarbeitung sind sie ungeeignet. Ein einfacher Zeilenumbruch ist normal ein Zeichen. Mit <br> hingegen ergibt eine Zeichenzählung einen um 3 Zeichen längeren String als mit "echtem" Zeilenumbruch.

    Weitere Probleme gibt es, wenn andere Werte in den Ausgabekontext gelangen sollen und dafür behandelt werden müssen, und diese mit den bereits behandelten Werten vermischt werden sollen. Dann muss man manche Daten behandeln, andere wiederum nicht, und das trägt nicht gerade zur Einfachheit bei.

    Deshalb die Empfehlung, immer im Roh-Format zu speichern und Werte nur für den aktuellen Kontext behandeln, nie für einen irgendwann mal später verwendeten.

    Wenn ich im Text die sogenannten Gänsefüßchen verwende, wird in die Datenbank ein Slasch davor eingetragen: (mein "text" für Dich = mein "Text" für Dich).

    Das ist ein PHP-Feature namens Magic Quotes, das seinerseits dafür zu sorgen versucht, dass die Eingabedaten SQL-gerecht behandelt werden. Dieses Feature ist jedoch aufgrund seiner Positionierung im Verarbeitungsablauf nicht unproblematisch. Es behandelt nämlich sämtliche Eingabedaten (GET/POST/Cookies) vor dem Scriptstart und ohne wissen zu können, in welchen Ausgabekontext sie später mal gelangen werden und ob Slashes die dafür passendew Behandlung ist.

    Da du dich selbst um die SQL-kontextgerechte Behandlung deiner Daten kümmerst, kannst und musst du die Magic Quotes ausschalten oder seine Auswirkungen rückgängig machen. Ab PHP6 wird es die M.Q sowieso nicht mehr geben.

    echo "$verabschiedung $name";