MySQL / PHP - Charsetfehler bei sicherem Eintragen

  • Hallo,
    ich möchte das man bei der Ausgabe auch Java Script oder PHP
    Code ausgeben kann, dieser jedoch in der Datenbank "zensiert"
    gespeichert wird.
    Dafür nutze ich zum speichern die Funktion: htmlentities()
    Und zum Ausgeben die Funktion: stripslashes()

    Jedoch bekomme ich dann folgendes Problem:
    [Blockierte Grafik: http://www.abload.de/img/pic051ctff.png]
    Kennt wer eine Lösung?
    Danke

  • Zitat

    Dafür nutze ich zum speichern die Funktion: htmlentities()

    Warum? Das solltest du nur bei der Ausgabe machen! Beim Speichern aber mysql_real_escape_string verwenden!

  • Natürlich benutzt du einen Charset. Sogar an mehreren Stellen.

    a) in der Webseite. Abhängig davon ist der Content der an die Datenbank zum Speichern geschickt wird in diesem Charset formatiert.
    b) die Datenbankverbindung. Wenn a) utf-8 oder irgendwas anderes als ein iso-Charset ist musst Du die Datenbankverbindung VOR dem Speichern der Inhalte entsprechend konfigurieren (Stichwort "SET collation")
    c) die Datenbank selbst. Die muss einen Charset haben in dem der Content in der Datenbank gespeichert werden soll.

    Alle 3 Punkte müssen im Idealfall den selben Charset konfiguriert haben. Nur dann kannst Du auch Texte sauber speichern und auch wieder ausgeben.

  • Bei a) z.B. im Firefox wenn Du dir die Seiteneigenschaften anzeigen lässt oder eine Erweiterung verwendest die dir den Header ausgeben kann (Webdeveloper oder LiveHeader). Außerdem müsstest Du es bereits selber wissen wenn Du den Server selbst betreust.

    Bei c) z.B. im phpmyadmin in der Übersicht der Datenbanken oder in der Übersicht der Tabellen der Datenbank sowie in den Tabellen-Eigenschaften. Wenn man eine Datenbank anlegt muss man sich bereits für einen Charset entscheiden.

  • Hallo,
    in den Seiteninformationen steht: utf8
    Und in der Datenbank Koallition: latin1_general_ci

    Ist dies also der knackpunkt und muss man zwingend das gleiche
    Charset festlegen also auch in der Webseite damit nicht der Standard
    genommen wird und nachher von verschiedenen Browsern verschiedene
    Charsets zusammenkommen?

  • Hallo,
    in den Seiteninformationen steht: utf8
    Und in der Datenbank Koallition: latin1_general_ci

    Ist dies also der knackpunkt und muss man zwingend das gleiche
    Charset festlegen also auch in der Webseite damit nicht der Standard
    genommen wird und nachher von verschiedenen Browsern verschiedene
    Charsets zusammenkommen?

    Entweder du stellst das Charset deiner Datenbank auf UTF-8 oder du musst den Kram nach latin1 und dann nachher wieder nach UTF-8 formatieren^^ Diese Variante gibts natürlich auch noch für deine Webseite aber die einfache währe wohl in der Datenbank das Charset zu ändern.

    Gruß crAzywuLf :D

  • Funktioniert nun alles:

    Zum Speichern:
    $titel = htmlspecialchars(mysql_real_escape_string($_POST['titel']));
    Zun Ausgeben:
    stripslashes()

    Und alle Datenbanken mit Kollation auf UTF-8 neu erstellt ;)