Problem mit Zeichensätze UTF-8 und ISO-8859-1

matzseesi

Erfahrenes Mitglied
Hi Leute,

Ich habe folgendes Problem! Ich arbeite seit längerem an einer Website und habe (mittlerweile) auch schon seit längerem Probleme die Umlaute richtig darzustellen. Vor kurzem bin ich vom Zend Studio auf Eclipse umgestiegen und seit dem habe ich dieses Problem eigentlich richtig eklatant.

Wenn ich bei Eclipse unter "Edit" => "Set Encoding" den Zeichensatz auf UTF-8 stelle und folgenden Code

PHP:
$var = "ä";
$var = htmlentities($var);
echo $var;
auf den Server uploade und ausführe dann bekomme ich (als HTML Code) folgendes:

Code:
ä

Wenn das Encoding auf ISO-8859-1 gestellt ist und ich den selben PHP Code uploade und ausführe dann bekomme ich folgendes als Ausgabe:

Code:
ä

Was ja eigentlich stimmen sollte! So, jetzt ist mein gesamtes Projekt auf UTF-8 gestellt und ich habe irgendwie keine Lust alles durchzuackern. Ich habe bereits einmal kontrolliert ob irgendwo umlaute eingesetzt werden, allerdings sind jene mein kleineres Problem. Wenn ich aus der Datenbank etwas auslese oder reinschreibe passiert ja dasselbe!

Wie kann ich das sinnvoll lösen? wie kann ich dem PHP Interpreter sagen er soll nicht ISO-8859-1 verwenden sondern das UTF-8 Format. UND vor allem wie kann es sein dass es da überhaupt Probleme gibt. Ich dachte die Formate sind kompatibel zueinander!

Wenn ich phpinfo(); ausführe dann steht in dieser Server Variable: HTTP_ACCEPT_CHARSET folgendes: ISO-8859-1,utf-8;q=0.7,*;q=0.7 (Vielleicht hilft euch das weiter?

Vielen Dank für eure Hilfe

Gruß

Possal
 
Wenn du UTF-8 verwendest, sind Zeichenreferenzen außer für HTML-Metazeichen (verwende dafür dann die htmlspecialchars()-Funktion) nicht mehr nötig. Das ist ja gerade der Vorteil von UTF-8.
 
Ja aber nehmen wir an ein äü oder ein ß steht in der Datenbank! Und ich möchte dies jetzt ausgeben. Dann muss ich wohl die Funktion htmlentities() drüber lassen oder?

bzw.... eigentlich ist es ja klüger wenn ich das schon beim Hineinschreiben in die Datenbank mach, dann brauch ich beim Ausgeben keine Umwandlung mehr machen.

NUR.. => mein Fehler. ich habe nicht von anfang an die Umwandlung in Richtung Datenbank vorgenommen, deswegen lass ich bei der Ausgabe selbige Funktion noch einmal drüber..

Nur warum macht es für den PHP Interpreter einen Unterschied, wenn er mein File in UTF-8 bzw ISO bekommt?
 
Nein, bei der Übergabe ist möglicherweise nur eine Konvertierung von der in der Datenbank verwendeten Kodierung zu UTF-8 nötig. Bei einer Konvertierung von ISO 8859-1 zu UTF-8 ist die utf8_encode()-Funktion geeignet, andernfalls die mb_convert_encoding()-Funktion, die noch mehr Zeichenkodierungen und Zeichensätze unterstützt. Wenn die Datenbank allerdings auch UTF-8 verwendet, ist das alles nicht nötig.
Ich würde allerdings die Daten in ihrer Rohform in der Datenbank speichern und erst zur Ausgabe entsprechend des Ausgabeformats verarbeiten.
 
Najal,

Sagen wir mal jemand gibt als Forumpost daten ein mit vielen Umlauten! Würdest du dann die Umlaute umwandeln (htmlentities) und dann reinspeichern!

Oder die Umlaute so wie er sie eingibt in die Datenbank schreiben und bei der Ausgabe umwandeln in HTML code!

Hast du eine Begründung für einen der beiden Ansätze?

Und in welchen Zeichensatz sollte die Datenbank eingestellt werden? (MySQL) vor allem wo kann ich das machen? Der neueste Zeichensatz ist wohl utf-9 oder?

Gruß Posseidon
 
Zurück