Hallo Zusammen!
Das Problem mit dem ich mich gerade beschäftige ist zwar im Ansatz schon in vielen Forme und "How-To's" beschrieben und gelöst worden, aber noch nicht in Kombination mit einem bash-Terminal.
Vielleicht kann mir hier ja jemand helfen.
Problem: fehlerhafte Übertragung von Umlauten in UTF-8 aus einer Konsole (bash) in die MySQL-DB und Abruf über eine HTML-Seite (mit PHP und Apache)
Beschreibung: Zur Generierung von kontextabhängigen Internetseiten wird auf Daten einer MySQL-Datenbank zugegriffen. Diese Datenbank wurde zuvor auf einem ähnlichen System erstellt und musste nach einem kompletten Softwareupdate des Servers neu durch die Übertragung von .sql-Dateien eingespielt werden. Alles funktioniert auch, wie gehabt. Die bereits vorhandenen Daten und die darin enthaltenen Umlaute werden korekt dargestellt - zumindest auf den HTML-Seiten. Leider funktioniert die Darstellung aber bei Benutzung der Konsole (Terminal) nicht richtig.
Grundsätzliche Einstellungen: Die Daten in der Datenbank sollten im UTF-8-Format gespeichert sein. Hier weiß ich aber nicht, wie ich das kontrollieren kann. Diese werden über ein PHP-Skript ausgelesen und im Browser dargestellt. Die HTML-Seite wird in UTF-8 angezeigt. Das läßt sich im Browser kontrollieren [Ansicht - Zeichenkodierung = UTF-8]. Hier ein Beispiel aus den Urspünglichen Daten:
"Behälter an einem gut gelüfteten Ort aufbewahren"
Wenn ich die Anzeige im Browser umstelle auf ISO-8859-15, wird folgendes angezeigt:
"BehÀlter an einem gut gelÌfteten Ort aufbewahren."
Wenn ich diesen Satz über die Konsole (bash) abrufe, erscheint folgendes:
"Behälter an einem gut gelüfteten Ort aufbewahren."
Die Konsole ist allerdings auf den Zeichensatz UTF-8 eingestellt. Wenn ich die Konsole auf ISO-8859-15 umstelle, sieht die Anzeige so aus:
"BehÀlter an einem gut gelÃÂŒfteten Ort aufbewahren."
Hat jemand eine Idee, woran das liegt, dass die Umlaute im Browser in UTF-8 korrekt dargestellt werden umd in der Konsole nicht?
Das Problem erweitert sich nun dadurch, dass ich Daten in die Datenbank ergänzen möchte - und zwar über die Konsole, das die Erfassung durch Skripte sehr viel schneller geht. Wenn ich nun den Satz
"Ein Test: äöü äöüß/ÄÖÜ"
über die Konsole (eingestellt auf UTF-8) in die MySQL-DB eingebe, kann ich den auch so wieder über die Konsole auslesen. Stelle ich die Konsole auf ISO-8859-15 um, kommt beim Auslesen das heraus:
"Ein Test: äöü ÀöÌÃ/ÃÃÃ"
Im Browser (Anzeige = UTF-8) sieht es so aus:
"Ein Test: äöü ����/���"
und bei Anzeige = ISO-8859-15 erscheint folgendes:
"Ein Test: äöü äöüß/ÄÖÜ"
Da kommt bei mir ein großes Fragezeichen auf, warum die Eingabe über die Konsole in UTF-8 im Browser nur als ISO-8859-15 richtig dargestellt wird. Leider kann ich diesen Anzeigemodus nicht verwenden, weil dann die bereits in der DB vorhandenen Daten nicht richtig angezeigt werden.
Nächster Versuch: Ich gebe den Satz über die Konsole im ISO-Modus ein und lasse sie mir in diesem Modus ausgeben. Das Ergebnis sieht erstaunlicher Weise so aus:
"Ein Test: äöü ????/??"
Auch beim Wechsel in den UTF-8-Modus bringt das Auslesen dieses Ergebnis. Dieses Ergebnis bleibt auch im Browser (egal, ob die Zeichencodierung auf ISO oder UTF steht).
Info zur Konfiguration: - in der my.cnf habe ich eingetragen (nur ein Auszug):
[client] default-character-set = utf8 [mysqld] character-set-client = utf8 character-set-server = utf8 collation-server = utf8_general_ci init_connect = 'SET collation_connection = utf8_general_ci' init_connect = 'SET NAMES utf8' init_connect = 'SET CHARACTER SET utf8' [mysqlimport] default-character-set = utf8 [mysqldump] default-character-set = utf8 [mysql] default-character-set = utf8 [isamchk] default-character-set = utf8
In der php.ini habe ich eingetragen (nur ein Auszug):
default_charset = "UTF-8" iconv.input_encoding = UTF-8 iconv.internal_encoding = UTF-8 iconv.output_encoding = UTF-8 ibase.default_charset = "UTF-8" mysql.default_charset = "UTF-8" mssql.charset = "UTF-8" mbstring.language = UTF-8 mbstring.internal_encoding = UTF-8 mbstring.http_input = UTF-8 mbstring.http_output = UTF-8 exif.encode_unicode = UTF-8
Und in der apache2.conf habe ich
AddDefaultCharset utf-8
ergänzt.
Ich möchte nun wissen, was ich tun muss, damit die Daten, die ich über die Konsole eingebe, korrekt (in UTF-8) im Browser dargestellt werden. Ich habe das Gefühl, dass dies an der Konsole liegt. Hier noch eine Zusatzinfo: Ich nutze Ubuntu 12.04 und halte das System auf dem aktuellen Stand.
Kann mir bitte jemand helfen?
Bearbeitet von redknight:
Forensyntax gerichtet. Da hatte man ja Augenkrebs.