dedlfix: ä wird zu seltsamen zeichen

Beitrag lesen

echo $begrüßung;

ich bin gerade draufgekommen, dass das programm, mit dem ich arbeite, die funktion "convert dos to unix" bietet; und wenn ich ein script von z.b. wordpress öffne, bekomme ich ein fenster, ob diese datei in dos konvertiert werden soll (also ist die wahrscheinlich für unix)

Diese Funktion konvertiert nur die Zeilenenden. Mit der Zeichenkodierung hat sie nichts zu tun. Zeichenkodierungen sind nicht betriebssystemabhängig.

sollte ich das einmal probieren?

Das ist unnötig.

(ich hoffe, das war jetzt nicht zu chaotisch)

Zumindest war der bisherige Verlauf des Fadens so. Versuch einer Ordnung:

Wichtig ist, dass:

  • du zunächst Grundkenntnisse über Zeichenkodierung und UTF-8 im Speziellen aneignest.

  • du weißt, dass deine "seltsamen Zeichen" (ö => ö) UTF-8-kodiert sind, aber du sie gemäß ISO-8859-1 dekodiert angeschaut hast.

  • jede beteiligte Komponente intern mit UTF-8 umzugehen versteht (was PHP derzeit noch nur eingeschränkt kann).

  • bei der Kommunikation zwischen zwei Komponenten (Datenbank zu Webserver, Webserver zu Client), sie über die zu verwendende und verwendete Zeichenkodierung aufgeklärt werden. Das wissen sie entweder per Konfiguration oder es muss ihnen vom Kommunikationspartner explizit mitgeteilt werden.

  • du Scripte, die auszugebenden Text im Code enthalten, als UTF-8 ohne BOM kodiert speicherst.

  • du Ausgaben in Richtung Browser

  • a) als UTF-8 deklarierst, was im HTTP-Header Content-Type mit der charset-Angabe erfolgt. Außerdem ist eine gleichnamige Meta-Angabe sinnvoll, wenn die Seite nicht im Webserver-Kontext steht, beispielsweise, wenn sie lokal gespeichert wurde, oder der Webserver keine charset-Angabe macht. Prüfe die HTTP-Header mit einer Browser-Extension, wie httpliveheaders für den Firefox.

  • b) die Ausgaben auch tatsächlich in der Kodierung UTF-8 erfolgen.

  • Daten aus und in Richtung MySQL in der Verbindungskodierung übertragen werden (müssen). Wenn diese von der Kodierung der Felder (Nur die Feldkodierung ist letzlich ausschlaggebend. Datenbank- bzw. Tabellenkodierungsangaben sind Defaultwerte für neu erstellte Tabellen bzw. Felder ohne explizite Angabe.) abweicht, kodiert MySQL die Daten selbständig um (was gegebenenfalls prinzipbedingt nicht verlustfrei geht). Zum Aushandeln der Verbindungskodierung sollte man die Funktion mysql_set_character_set() bzw. deren Pendants in der jeweiligen Programmierumgebung bevorzugen (PHP z.B. mysql_set_charset()), oder zumindest für ISO-8859-x und UTF-8 alternativ ein SET NAMES-Statement nach dem Verbindungsaufbau senden.

  • du weißt, dass wenn der phpMyAdmin etwas richtig anzeigt, diese Daten ordnungsgemäß kodiert in MySQL stehen - und umgekehrt, wenn nicht, etwas nicht in Ordnung ist.

  • sich ein Browser gemäß HTTP-Header, Meta-Angabe und Raten (in dieser Prioritätsreihenfolge) die Zeichenkodierung zum Dekodieren der Daten ermittelt. Im Menü Ansicht->(Zeichen)kodierung kann man die Kodierung umstellen, und sehen, was wäre, wenn für die Daten eine andere Kodierung deklariert wäre.

echo "$verabschiedung $name";