Sven Rautenberg: utf-8 und PHP und HTTP-Header des Webserver

Beitrag lesen

Moin!

Sollte man also bei gemsischtsprachlichen Texten im Title-Tag einen ASCII-Text (englisch) hinterlegen? Sonst würde man sich ggf. wundern, was denn die hübschen Kästchen dort sollen.

Hängt von der Situation ab. Kann ein Chinese englisch? Kann der mit englischen Worten bzw. Worten, die in lateinischen Buchstaben geschrieben wurden, etwas anfangen? Wenn ja, oder wenn egal, dann kannst du gerne nur ASCII in den Titel schreiben. Bedenke aber: Auch die deutschen Umlaute dürften dann nicht dort hinein. :)

Haben denn wohl alle Browser dieser Welt (die verbreiteten) mindestens den ASCII-Zeichnsatz als gemeinsame Basis? Ich bin noch nie in China gewesen bzw. habe noch kein chinesich eingerichtetes Gerät zu sehen bekommen.

Ich würde genau das behaupten. Computer und deren Zeichen sind im Grundsatz eine amerikanische Erfindung gewesen, deswegen auch "ASCII" = "American Standard Code for Information Interchange". :)

Diese elementare Grundlage konnte von keinem Hersteller mehr ignoriert werden. Selbst die Chinesen und Japaner benötigen ASCII-Buchstaben und -Zahlen für die Darstellung diverser ausländischer Worte und Bezeichnungen. Die ASCII-Zeichen also zu entfernen wäre reichlich blödsinnig.

Man kann dann hineinklicken und bekommt das Eingabefenster und darüber den Vorlagetext aus der eingestellten Muttersprache. Schön wäre es, wenn man dem Browser nun sagen könnte, dass er die in der Textarea eingegeben Zeichen gleich im Zeichensatz der Zielsprache darstellen soll ;-))

Das ist schlicht Aufgabe des Tastaturtreibers, die richtigen Zeichen zu produzieren, nicht Aufgabe des Browsers.

Stell' deine Tastatur richtig ein, so dass Tastendrücke türkische Zeichen produzieren, und alles wird perfekt funktionieren. Der Browser wird dir automatisch die richtige, utf-8-codierte Darstellung senden.

Da haben wir und hoffentlich verkehrt verstanden. Die Flatfiles speichern doch lediglich einen Bytestream. Wie der vorbereitet wurde und demnach tunlichst nach dem Ausleden auch wieder interpretiert werden soll, ist doch Sache der Applikation, oder?

Im Prinzip ja, dasselbe findet aber auch bei Datenbanken statt.

Ich will hoffen, dass PHP hier transparent arbeitet und nicht irgendeinen "Cooked Mode" eingebaut hat!

PHP interpretiert kein Unicode, jedenfalls noch nicht (bezogen auf Versionen bis 4.4.0, mit 5 habe ich noch nicht gearbeitet). PHP arbeitet nur mit Bytestrings, deren Zeichenbedeutung nicht festgelegt ist.

Im Gegensatz dazu arbeitet ASP beispielsweise sehr wohl mit Unicode. Sämtliche Strings sind im Unicode abgelegt, unabhängig von UTF-8 ist dort ein Zeichen, auch wenn es aus mehreren UTF-8-Bytes besteht, immer genau ein Zeichen (bezogen auf strlen() beispielsweise) und ergibt den Unicode-Zahlencode, wenn man ord() drauf anwendet. Man arbeitet einfach ganz natürlich mit "Zeichen", ohne sich bei der Verarbeitung irgendeinen Kopf über die Codierung zu machen. Lediglich bei den Schnittstellen, also beim Kontakt zu Datenbanken, Dateien und Richtung Browser muß man natürlich definierte Zustände haben. Ganz praktisch ist, dass ASP automatisch passende Ausgabeformatierungen erstellt, wenn man sagt, dass die Ausgabe als ISO-8859-1 erfolgen soll, oder eben als UTF-8. Sowas automatisches fehlt bei PHP leider noch - ein Punkt, bei dem das kommerzielle Produkt mal eindeutig dem Open-Source voraus ist.

Textpad kann UTF-8 abspeichern.
Es kann auch UTF-8 als Byte-Code anzeigen. Das gibt dann eben den "Datenmüll"

Und PHP "sieht" auch nur den Byte-Code - aber wenn das Programm den nicht verstehen muß, kann der wunderbar einfach zum Browser durchgeschleust werden, und wird dort bei der HTTP-Angabe "utf-8" korrekt interpretiert.

Bei dieser Gelgenheit: Wie kann ich dem IE6 abgewöhnen, dass er den "Quellcode" bereits durch die Decodierung jagt, bevor er ihn anzeigt? Ich würde ihn gerne als Bytecode (also 'ASCII') sehen können.

Das ist kein Bug, sondern ein Feature. Der IE nimmt gewöhnlich den Notepad als Anzeigeprogramm, und Notepad kann Unicode. Also siehst du (was schlau ist, da alles andere ja eher unlesbar wäre) die eingegebenen Zeichen.

Fragt sich nun nur, woher ich mal eben schnell einen türkischen Zeichensatz zum testen bekomme.

Türkisch dürfte, da es nicht so viele Zeichen enthält, z.B. in "Arial Unicode" mit drin sein.

Allerdings müsste die Sprachunterstützung vom Browser sowas ja mitbringen, oder?

Der Browser bringt keine Fonts mit.

Wie sieht diese BOM aus? Kann man das was nachlesen? Irgendwann hatte ich das schonmal gelsen *umpf*

Es handelt sich um das Unicode-Zeichen U+FEFF, welches in der entsprechenden Codierung (UTF-8, -16 oder -32) als erstes Zeichen in der Datei steht. Die UTF-8-Darstellung macht daraus beispielsweise 3 Bytes.

- Sven Rautenberg