Zur Navigation

MySQL speichert/gibt Zeichen falsch aus

1 SpikeSheppard

Hallo,

bei meiner Datenbankabfrage funktioniert etwas nicht. Ich habe alle Dateien auf "UTF-8 Ohne Bom" eingestellt (im Notepad++) und dort wird immer ANSI as UTF-8 angezeigt. Wenn ich die Datei speicher und dann neu öffne, ist die Kodierung auf ANSI. Wie kann ich das fest auf UTF-8 ohne Bom einstellen?

Dazu habe ich in jeder Seite diesen Header:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

Und ich verbinde mich so zur Datenbank:
mysql_connect($host, $user, $pass) or die(mysql_error());
mysql_select_db($database);

mysql_query("SET NAMES 'utf8'");

Die Datenbank selbst ist auf "Character Set UTF8" und "Collation UTF8_general_ci" eingestellt, trozdem werden Umlaute falsch dargestellt. Wenn ich z.B. in einer Datei diesen Text ausgeben:
echo "Parameter nicht übergeben!";
wird alles korrekt dargstellt. Wenn ich jetzt aber ein Umlaut (z.B. im Namen "Köcher") über einen MySQL-Eintrag ausgeben steht das da:
Köcher

Und in der Datenbank steht:
K&Atilde;&para;cher

Wodran liegt das? Wie kann ich das ändern?

30.03.2012 15:09

2 Jörg Kruse

Zitat von SpikeSheppard
Und in der Datenbank steht:
K&Atilde;&para;cher

Anscheinend verwendest du schon vor einem INSERT bzw. UPDATE in die Datenbanktabelle ein htmlentities() - die Zeichen à und ¶ wurden als HTML-Entities in die Datenbank eingefügt. Der Fehler liegt wahrscheinlich schon in der Verarbeitung des Formulars, mit welchem die Eingaben übermittelt werden. Hast du auch auf der Formularseite eine entsprechende Meta-Angabe mit charset=utf-8 drin?

30.03.2012 16:05

3 SpikeSheppard

Benutzt man also ein htmlentities() bei der Ausgabe und nicht bei der Eingabe? Ansonsten, wie gesagt, jede Seite hat die Meta-Angabe im Header. Alles Funktionen, alle Seiten, alle Configs.

Ich werde das mal ändern und schauen was passiert. Ich meld mich dann nochmal.

30.03.2012 17:39

4 Jörg Kruse

Ich benutze htmlspecialchars() statt htmlentities() und das auch nur bei der Ausgabe in HTML- oder XML-Dokumente. Es gibt auch Anwendungsfälle, wo htmlspecialchars() nicht benötigt wird, z.B. bei der Ausgabe in Emails. Deswegen halte ich eine globale Anwendung von htmlspecialchars() oder htmlentities() bereits bei der Eingabe nicht für sinnvoll.

30.03.2012 17:57

5 Rudy

Wenn ich die Datei speicher und dann neu öffne, ist die Kodierung auf ANSI.

Wenn im Text nur ANSI-Zeichen vorkommen und die Datei kein BOM hat, das die Kodierungsinformation enthält, ist die Datei für den Editor ANSI. Notepad++ hat eine Option, um den Zeichensatz UTF8 ohne BOM "auch für ANSI Dateien" voreinzustellen.

In diesem Post findest Du ein PHP-Skript, um die BOM überall zu entfernen.

Hier gibts noch Infos für die Darstellungsprobleme mit UTF8.

01.04.2012 19:14

Beitrag schreiben (als Gast)

Die Antwort wird nach der Überprüfung durch einen Moderator freigeschaltet.





[BBCode-Hilfe]