UTF8-Problem

tobias1985

Der Erlöser
ID: 37913
L
24 April 2006
4.963
607
Hallo zusammen,
ich habe ein kleines Problem. Und zwar habe ich eine Seite von mir nun auf UTF8 umgestellt.
Heißt:
- Im HTML-Header folgende Angabe:
<meta http-equiv="content-type" content="text/html; charset=UTF-8" />
- Alle Dateien (PHP, HTML) mit einem entsprechenden Editor geöffnet und als UTF8 gespeichert.

Soweit so gut. Die Texte werden korrekt dargestellt, egal ob ä,ö,ü oder ß.

Jetzt habe ich aber auch Texte, die aus einer MySQL-Datenbank-Tabelle ausgelesen werden. (PHP-Script)
Diese Texte werden aber nicht korrekt dargestellt. Statt den Umlauten bekomme ich nur Kästchen angezeigt.
Die MySQL-Tabelle ist aber bereits UTF8.
Die Kollation jeder Tabelle ist auf utf8_general_ci gestellt. Und auch die Kollation der entsprechenden Felder sind auf utf8_general_ci gestellt.

Jemand eine Idee, oder noch besser eine Lösung für das Problem? :D

Gruß
Tobi
 
Schonmal versucht die DAten aus der Tabelle mit php utf8_encode / utf8_decode zu verarbeiten? Probiers ma aus :mrgreen:
 
Ich habe aber eine weitere Seite, diese war von Anfang an auf UTF8 und dort funktioniert das gleiche PHP-Script ohne Probleme.
Die Tabelle ist 100% identisch, wie auf dem jetzigen Problem-Projekt. (bis auf den Inhalt natürlich, aber auch beim funktionierenden Projekt sind Umlaute drin)
 
Kästchen = Zeichen, die nicht UTF-8 kodiert wurden, z.B. Umlaute im >128-Bereich.
:arrow: utf8_encode() über die Daten, um aus den 1-Byte-Umlauten, 2-Byte-UTF-8-Sequenzen zu machen.
 
Ok, also liegt es daran, dass die Daten nicht korrekt in die Datenbank eingetragen wurden.
Werden neue Daten automatisch korrekt eingetragen (da jetzt die Tabellen und Scripte das richtige Format haben), oder ist man gezwungen, die Daten immer mit utf8_decode() einzutragen?

EDIT: Ich hab jetzt nicht soviel Lust hunderte Scripte zu prüfen, wo überall ein utf8_encode() fehlt. Kann ich die Daten in der MySQL-Datenbank nicht automatisch korrekt konvertieren, so dass sie dort bereits korrekt drin stehen und die Ausgabe dann ohne utf8_encode() funktioniert?
 
Code:
[FONT=Courier New][B][COLOR=#9932cc]SET[/COLOR][/B] [B][COLOR=#9932cc]NAMES[/COLOR][/B] utf8;[/FONT]
[FONT=Courier New][B][COLOR=#9932cc]SET[/COLOR][/B] [B][COLOR=#9932cc]CHARACTER SET[/COLOR][/B] utf8;[/FONT]
Befrag hierzu aber auch nochmal das fickende Handbuch :mrgreen:, da bin ich selber nicht grad der Profi, was DB und Charset angeht.
 
Jep, das hilft. Liegt wohl daran, dass in MySQL direkt noch einiges auf Latin1 eingestellt ist.
Es wird aber davon abgeraten, dies zu ändern, wenn bereits Datenbanken existieren. Das würde ein Mischmasch geben, der zu diversen Problemen führt. :roll:

Also tut es fürs erste folgendes nach jedem DB-Connect:
PHP:
mysql_query("SET NAMES 'utf8'");
mysql_query("SET CHARACTER SET 'utf8'");

EDIT: Wen es interessiert:
https://www.gerd-riesselmann.de/softwareentwicklung/php-und-utf-8-eine-anleitung-teil-1-mysql
 
Es tut nicht nur seine Arbeit, es ist die Lösung.
Wie du darauf kommst, dass es abgeraten wird das Verbindungs-Charset zu ändern, frage ich mich auch.

Edit: nur SET NAMES nutzen
 
Es tut nicht nur seine Arbeit, es ist die Lösung.

Ist der zusätzliche Query vernachlässigbar?

Wie du darauf kommst, dass es abgeraten wird das Verbindungs-Charset zu ändern, frage ich mich auch.

Hier:

https://www.gerd-riesselmann.de/softwareentwicklung/php-und-utf-8-eine-anleitung-teil-1-mysql schrieb:
Naja, nicht ganz. Wir können natürlich an der MySQL-Konfiguration herumschrauben und dort UTF-8 als Standard setzen. Hier der entsprechende Auszug aus meiner MySQL-Konfiguration :

[mysql]
default-character-set=utf8

[mysqld]
collation_server=utf8_unicode_ci
character_set_server=utf8


Allerdings kann das zu unangenehmen Überraschungen führen, wenn das System migriert wird. Und wenn erst einmal richtige UTF-8 und ANSI-UTF-8-Mischmasch-Daten in einer Tabelle stehen ist Spaß garantiert.

EDIT: Stimmt, SET NAMES reicht.