/ PHP Darstellungsprobleme mit UTF-8
Fabian St.
- datenbank
0 dedlfix0 Fabian St.1 dedlfix0 Fabian St.0 dedlfix
Hi!
Eigentlich dachte ich ja, ich kenne mich damit aus, aber im Moment komme ich irgendwie so gar nicht weiter :-/
Es ist ein Affenformular gegeben, welches Daten an die gleiche Seite schickt, damit diese in eine Datenbank eingetragen werden. Gleichzeitig gibt das Skript alle eingetragenen Daten aus.
Wenn das Skript folgendermaßen aussieht und man als Text »äöü« eingegeben hat, wird dies auch so wieder angezeigt. In PHPMyAdmin schaut das ganze jedoch so aus: äöü
Wenn das Skript folgendermaßen aussieht und man als Text wiederum »äöü« eingegeben hat, wird dies fälschlicherweise als »���« angezeigt. In PHPMyAdmin hingegen passt das ganze nun wieder.
Ich kann mir das ganze wirklich nicht erklären und mir fehlt im Moment auch sonst die Idee, woran es noch liegen könnte, zumal ich beinahe jedem Hinweis von dedlfix und Sven Rautenberg im Archiv gefolgt bin. Die Dateien encoding1.php / encoding2.php sind UTF-8 kodiert, der Apache liefert die Seiten grundsätzlich als UTF-8 aus, die Kollation der Tabelle »test« ist utf8_general_ci und in der my.cnf ist ebenfalls für alle Werte »utf8« voreingestellt.
PHP: 5.0.5-pl3-gentoo
MySQL: 4.1.14
PHPMyAdmin: 2.7.0-pl1
Grüße,
Fabian St.
echo $begrüßung;
- Wenn das Skript folgendermaßen aussieht [...]
Du solltest die MySQL-Fehlermeldungen nicht untern Tisch fallen lassen.
echo "$verabschiedung $name";
Hi!
- Wenn das Skript folgendermaßen aussieht [...]
Du solltest die MySQL-Fehlermeldungen nicht untern Tisch fallen lassen.
Mh, ja, das habe ich weggelassen, weil es für das Problem nicht entscheidet ist. Ich habe die beiden Versionen nun dementsprechend verbessert, aber der Fehler ist leider immer noch existent.
Grüße,
Fabian St.
echo $begrüßung;
Du solltest die MySQL-Fehlermeldungen nicht untern Tisch fallen lassen.
Mh, ja, das habe ich weggelassen, weil es für das Problem nicht entscheidet ist. Ich habe die beiden Versionen nun dementsprechend verbessert, aber der Fehler ist leider immer noch existent.
Gut, die »#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '="utf-8"'«-Meldung im ehemaligen Befehl »SET NAMES="utf-8"« ist nun beseitigt. Was ist aber mit der »#1115 - Unknown character set: 'utf-8'«-Meldung?
echo "$verabschiedung $name";
Hi!
Gut, die »#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '="utf-8"'«-Meldung im ehemaligen Befehl »SET NAMES="utf-8"« ist nun beseitigt. Was ist aber mit der »#1115 - Unknown character set: 'utf-8'«-Meldung?
Vielen Dank, dedlfix, und Schande über mich :-/ Jetzt funktioniert es :-) Ich sollte mein Debugging wohl wirklich etwas vertiefen und mir die Syntax-Beschreibungen im MySQL-Manual genauer durchlesen.
Was mich nun jedoch nur noch wundert ist, warum dieses »SET NAMES utf8« explizit nötig ist. Wie aus diesem Auszug deutlich wird, ist »SET NAMES« bloß eine Art Synonym für »SET character_set_client X«, »SET character_set_results X« und »SET character_set_connection X« und alle diese Werte stehen bei mir laut »SHOW VARIABLES« in der Konsole sowieso auf »utf8«.
Auch der Tipp aus den User-Kommentaren mit dem
[mysqld]
init-connect='SET NAMES utf8'
in der my.cnf bringt leider nichts.
Grüße,
Fabian St.
echo $begrüßung;
Was mich nun jedoch nur noch wundert ist, warum dieses »SET NAMES utf8« explizit nötig ist. Wie aus diesem Auszug deutlich wird, ist »SET NAMES« bloß eine Art Synonym für »SET character_set_client X«, »SET character_set_results X« und »SET character_set_connection X« und alle diese Werte stehen bei mir laut »SHOW VARIABLES« in der Konsole sowieso auf »utf8«.
An der Konsole können andere Konfigurationseinstellungen gelten (z.B. ~/my.cnf) als für den Zugriff via PHP. Lass dir lieber die VARIABLES von einem PHP-Script anzeigen.
Auch der Tipp aus den User-Kommentaren mit dem
[mysqld]
init-connect='SET NAMES utf8'in der my.cnf bringt leider nichts.
Hast du nach der Änderung den MySQL-Server die Konfiguration neu lesen lassen? Bei mir wirkt diese Zeile in der Gegenrichtung sehr gut. »SET NAMES latin1« benötige ich für einige ältere Anwendungen. Gentoo hat mittlerweile (MySQL 4.1.14) alles my.cnf-Einstellungen auf utf8 gesetzt (wahrscheinlich ist dafür das UseFlag utf8 die Ursache).
echo "$verabschiedung $name";
Hi!
An der Konsole können andere Konfigurationseinstellungen gelten (z.B. ~/my.cnf) als für den Zugriff via PHP. Lass dir lieber die VARIABLES von einem PHP-Script anzeigen.
Ich habe weder auf dem Server noch hier auf meinem Arbeitsplatzrechner eine eigene my.cnf, sondern nur die globale unter /etc/mysql. Aber in der Tat, schreibe ich mir ein Skript, das mir alle Variablen anzeigt, so stehen »character_set_client«, »character_set_connection« und »character_set_results« auf latin1, obwohl diese in der Konsole den Wert utf8 haben. Jetzt würde es mich nur noch interessieren, wo dies gesetzt wird. Ich mache mich mal auf die Suche ;-)
Auch der Tipp aus den User-Kommentaren mit dem
[mysqld]
init-connect='SET NAMES utf8'in der my.cnf bringt leider nichts.
Hast du nach der Änderung den MySQL-Server die Konfiguration neu lesen lassen? Bei mir wirkt diese Zeile in der Gegenrichtung sehr gut. »SET NAMES latin1« benötige ich für einige ältere Anwendungen. Gentoo hat mittlerweile (MySQL 4.1.14) alles my.cnf-Einstellungen auf utf8 gesetzt (wahrscheinlich ist dafür das UseFlag utf8 die Ursache).
Natürlich, der MySQL-Daemon wurde neugestartet, aber leider wird »SET NAMES utf8« offensichtlich nicht ausgeführt bzw. hat keine Auswirkungen für den Zugriff mit PHP.
Ich habe außerdem jetzt noch gerade ins Ebuild für mysql-4.1.4 geschaut und dort wird UTF-8 tatsächlich als Standard für das Config-Layout gesetzt, wenn es sich um eine MySQL-Version > 4.1.3 handelt und zudem noch das USE-Flag »utf8« gesetzt ist.
Grüße,
Fabian St.