ubuntuusers.de

Umlaute (UTF-8) aus einer Konsole (bash) in MySQL und Abruf über HTML-Seite (mit PHP und Apache)

Status: Ungelöst | Ubuntu-Version: Ubuntu 12.04 (Precise Pangolin)
Antworten |

Preduntu

Avatar von Preduntu

Anmeldungsdatum:
16. März 2010

Beiträge: Zähle...

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.

Preduntu

(Themenstarter)
Avatar von Preduntu

Anmeldungsdatum:
16. März 2010

Beiträge: 9

Hallo!

Trotz diverser Konfigurationen - unter anderem mit Hilfer des Artikels unter Umgebungsvariable - hat sich nichts geändert. Ich dachte erst, es könne daran liegen, dass ich Ubuntu 12.04-Beta installiert habe, weil ich das eigentliche Release nicht abwarten wollte, aber das scheint auch nichts zu bringen.

Ich habe mich jetzt erstmal mit der uneleganten Lösung zufrieden gegeben, dass ich bei allen Inhalten, die ich über die Konsole in die Datenbank übertrage, mit Hilfe des "replace"-Befehls die Umlaute austausche. Das funktioniert zwar, aber ich sehe dieses Thema dennoch nicht als gelöst an.

Falls jemand noch eine andere Lösung findet, fände ich das echt toll.

Gruß Preduntu

Antworten |