Text in Datenbanken
Hallo,
ich möchte in meiner MySQL Datenbank einen (längeren) Text speichern. Es handelt sich dabei um Gästebucheinträge und die Beschreibungen für Events. Ich habe dazu den Typ TEXT verwendet. Problem ist jetzt:
Umlaute
auf der Webseite erscheint z.B. das ö durch eine schwarze Raute ersetzt. Da man hier sehr viel rumprobieren kann ohne ein Ergebnis zu erhalten, frage ich mal lieber die Profis
Der Text wurde jetzt erstmal direkt in die DB eingegeben und die DB ist UTF8 kodiert.
Zeilenumbrüche
Der Text wird in der Datenbank zwar mit Umbrüchen gespeichert, durch PHP aber offenbar ohne Umbrüche ausgegeben. Wie erreiche ich, dass die Umbrüche da bleiben ? Oder muss ich das händisch machen, indem ich nach einem \n im String suche und dann durt ein </p><p> einfüge?
ich möchte in meiner MySQL Datenbank einen (längeren) Text speichern. Es handelt sich dabei um Gästebucheinträge und die Beschreibungen für Events. Ich habe dazu den Typ TEXT verwendet. Problem ist jetzt:
Umlaute
auf der Webseite erscheint z.B. das ö durch eine schwarze Raute ersetzt. Da man hier sehr viel rumprobieren kann ohne ein Ergebnis zu erhalten, frage ich mal lieber die Profis
Zeilenumbrüche
Der Text wird in der Datenbank zwar mit Umbrüchen gespeichert, durch PHP aber offenbar ohne Umbrüche ausgegeben. Wie erreiche ich, dass die Umbrüche da bleiben ? Oder muss ich das händisch machen, indem ich nach einem \n im String suche und dann durt ein </p><p> einfüge?
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 116928
Url: https://administrator.de/forum/text-in-datenbanken-116928.html
Ausgedruckt am: 03.04.2025 um 14:04 Uhr
16 Kommentare
Neuester Kommentar
Hallo,
Also du hast im groben 2 Probleme:
1. Umlaute:
hier heist die Lösung wahl des richtigen Charsets. Wahrscheinlich wird deine Webseite in Latin-9 ausgegeben. Probiers mal mit UTF-8 als Charset bei der Website.
Eventuell hast du ein Problem mit der Datenbankanbindung, such hierzu mal nach php+mysql+umlaute da gibs massig Ergebnisse.
2. Zeilenumbrüche
Jag den gesamten text mal durch ein
Also du hast im groben 2 Probleme:
1. Umlaute:
hier heist die Lösung wahl des richtigen Charsets. Wahrscheinlich wird deine Webseite in Latin-9 ausgegeben. Probiers mal mit UTF-8 als Charset bei der Website.
Eventuell hast du ein Problem mit der Datenbankanbindung, such hierzu mal nach php+mysql+umlaute da gibs massig Ergebnisse.
2. Zeilenumbrüche
Jag den gesamten text mal durch ein
$text = nl2br($text);
Aaaaaalso...
Du beachtest den Zeichensatz zu wenig.
Dieser muss komplett durchgängig sein von PHP zur DB und Zurück.
D.h.
PHP Seiten in UTF-8 ausgeben:
Formulare in UTF-8 anfragen:
Die DB-Verbindung in UTF-8 benutzen:
Und Anstatt htmlentities() htmlspechialchars() verwenden, mehr macht bei UTF-8 keinen Sinn.
A) Schreibst du HTML oder XHTML? Bei Ersteren hätte ein <?xml nichts zu suchen...
b) Die Fehlermeldung ist ein Hinweis darauf, dass in deiner PHP-Installation unnötigerweise
Du brauchst unbedingt entweder bei der Ein- oder Ausgabe htmlspechialchars(), ansonsten hast du eine prima XSS-Lücke gebastelt: http://de.wikipedia.org/wiki/Cross-Site_Scripting
Grüße
Max
Du beachtest den Zeichensatz zu wenig.
Dieser muss komplett durchgängig sein von PHP zur DB und Zurück.
D.h.
PHP Seiten in UTF-8 ausgeben:
header("Content-type: text/hmtl;Charset=UTF-8");
Formulare in UTF-8 anfragen:
<form [...] accept-charset="utf-8">
Die DB-Verbindung in UTF-8 benutzen:
mysql_query('SET NAMES `utf8`');
Und Anstatt htmlentities() htmlspechialchars() verwenden, mehr macht bei UTF-8 keinen Sinn.
Die Spalten der Tabelle haben die Kollation utf8_general_ci (vorher hatten die irgendwas mit Latin...)
Wenn ich oben in meine PHP-Datei ein <?xml version="1.0" encoding="UTF-8" ?> einfüge, dann kommt
Parse error: parse error in C:\xampp\htdocs\stammtisch\termine.php on line 1
Wenn ich oben in meine PHP-Datei ein <?xml version="1.0" encoding="UTF-8" ?> einfüge, dann kommt
Parse error: parse error in C:\xampp\htdocs\stammtisch\termine.php on line 1
A) Schreibst du HTML oder XHTML? Bei Ersteren hätte ein <?xml nichts zu suchen...
b) Die Fehlermeldung ist ein Hinweis darauf, dass in deiner PHP-Installation unnötigerweise
short_open_tags
aktiv sind - Am Besten ganz schnell deaktivierenIch weiß allerdings nicht, ob das die normale Lösung ist, denn es erscheint mir doch etwas umständlich, bei jedem Textfeld diese Funktion aufzurufen...
Du brauchst unbedingt entweder bei der Ein- oder Ausgabe htmlspechialchars(), ansonsten hast du eine prima XSS-Lücke gebastelt: http://de.wikipedia.org/wiki/Cross-Site_Scripting
Grüße
Max
Die html_entity-Funktionen haben einen Sinn: HTML-Steuerzeichen umwandeln.
Bei der Eingabe ein decode zu benutzen macht keinen Sinn, weil ein User ja allerhöchstens Steuerzeichen wie "<" direkt eingeben wird, aber nicht "<" - in der Hoffnung, dass daraus ein "<" wird.
Umgekehrt hingegen ist ein encode bei der Ausgabe ein absolutes Muss.
Sonst könnte ein Benutzer in ein Formularfeld z.B. einfach "<script>alert("Hallo");</alert>" eingeben und das für so in die Seite eingefügt und auch vom Browser ausgeführt.
Nur html_entities_encode() oder htmlspechialchars() umgehen dieser Problem, indem sie Steuerzeichen wie "<" in andere Steuerzeichen umwandeln, die allerdings einfach in der Anzeige und ich der Verarbeitung enden.
Grüße
Max
Bei der Eingabe ein decode zu benutzen macht keinen Sinn, weil ein User ja allerhöchstens Steuerzeichen wie "<" direkt eingeben wird, aber nicht "<" - in der Hoffnung, dass daraus ein "<" wird.
Umgekehrt hingegen ist ein encode bei der Ausgabe ein absolutes Muss.
Sonst könnte ein Benutzer in ein Formularfeld z.B. einfach "<script>alert("Hallo");</alert>" eingeben und das für so in die Seite eingefügt und auch vom Browser ausgeführt.
Nur html_entities_encode() oder htmlspechialchars() umgehen dieser Problem, indem sie Steuerzeichen wie "<" in andere Steuerzeichen umwandeln, die allerdings einfach in der Anzeige und ich der Verarbeitung enden.
Grüße
Max
Was genau macht denn dabei die Funktion header?
Mach dich doch erstmal mit dem HTTP-Protokoll vertraut.
http://de.wikipedia.org/wiki/HTTP
http://bolege.de/http-header/#art3_location
Die header()-Funktion löst nur ein spezifisches Problem:
dass beim Reload der Seite immer wieder ein neuer Eintrag angelegt wird
Den Code den du gepostet hast müsste in mein Beispiel in Zeile 3 eingefügt werden.
Grüße
Max
Lies dir doch bitte mal den Artikel genau durch:
http://www.joelonsoftware.com/articles/Unicode.html
Danach machen wir dann hier weiter
Grüße
Max
http://www.joelonsoftware.com/articles/Unicode.html
Danach machen wir dann hier weiter
Grüße
Max