Tom: utf-8 und PHP und HTTP-Header des Webserver

Beitrag lesen

Hello Sven,

so langsam werden Wirklichkeit und Vorstellung konvergent *freu*

Ist Bit 7 gesetzt und Bit 6 nicht, dann wird das Zeichen in zwei Bytes codiert
Ist Bit 7 gesetzt und Bit 6 und Bit 5 nicht, dann wird das Zeichen in drei Bytes codiert
Ist Bit 7 gesetzt und Bit 6 und Bit 5 und Bit 4 nicht, dann wird das Zeichen in vier Bytes codiert

ups, hätte ich eigentlich sehen müssen in den selber von mir zitierten Dokus (PHP und Wiki)

Ein Zeichen aus zwei Bytes beginnt mit 110x xxxx im ersten Byte.
Ein Zeichen aus drei Bytes beginnt mit 1110 xxxx im ersten Byte.
Ein Zeichen aus vier Bytes beginnt mit 1111 0xxx im ersten Byte.

Alle Folgebytes bestehen aus 10xx xxxx.

Einerseits: Wer nicht in der Lage ist, eine ausländische Sprache zu lesen, und sich deshalb nicht drum kümmert, dessen ausländische Zeichenformen als Font zu installieren, der wird sich kaum drum kümmern, dass stattdessen die Quadrate angezeigt werden. Er könnte es ja ohnehin nicht lesen.

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.
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.

Mit welchem Editor und welcher Tastatur und welchen OS-Einstellungen bekomme ich denn die Alien-Texte überhaupt in die Maschine?

Du benötigst irgendetwas, was unicodefähig ist und UTF-8 speichern/senden kann.

Empfehlenswert: Dein Webbbrowser mit einer Textarea.
Alternativ: "Unired" als Freeware-Unicode-Editor (mit Syntax-Highlighting), falls du diese Textarea schon mit einer Unicode-HTML-Seite zusammensetzen willst.
Alternativ-alternativ: Der Windows-Notepad ab Win2000 kann auch problemlos mit Unicode umgehen.

Die Idee mit dem Browser hatte ich auch schon.
Da ich ohnehin Templates baue, wollte ich versuchen, Zur Bearbeitung eine "Musterseite" anzeigen zu lassen, in der die auszufüllenden Elemente in ihrer Mindestgröße angezeigt werden. 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 ;-))

Reicht es, das charset im Header zu setzen?

Scheint also der richtige Weg zu sein.
Alternativ könnte man natürlich den VirtHost entsprechend konfigurieren.

Ich empfehle dringend, immer auch einen gleichlautenden Meta-Eintrag mitzusenden. Dann geht die Information "UTF-8" nicht verloren, wenn die Seite z.B. auf Festplatte abgespeichert wird.

Der Tipp ist Gold wert. Daran hätte ich jetzt nicht gedacht.

Wenn ich nun von PHP die Platzhalter ersetzen lasse, muss ich wissen, in welcher Codierung die in der Datenbasis stehen.

Es ist schlau, sämtliche Daten in UTF-8 abzuspeichern bzw. diese EINMALIG dorthin zu konvertieren.

Genau das kam mir in den Sinn. Allerdings wusste ich nicht, dass die 'natural order' der Zeichen im Gesamtzeichensatz auch der normalen Sortierreihenfolge in der jeweiligen Teilmmenge der Sprache genügt.

Beim Arbeiten mit Flatfiles müsste es doch egal sein.

Nein, ganz und gar nicht! Auch Flatfiles produzieren, genau wie Datenbanken, lediglich Strings, die im Skript verwendet werden.

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?
Ich will hoffen, dass PHP hier transparent arbeitet und nicht irgendeinen "Cooked Mode" eingebaut hat!

Wenn dein Textpad nicht unicodefähig ist, dann wird das aber nicht funktionieren.

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

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.

Fragt sich nun nur, woher ich mal eben schnell einen türkischen Zeichensatz zum testen bekomme.
Allerdings müsste die Sprachunterstützung vom Browser sowas ja mitbringen, oder?

Beim Öffnen bestehender Texte muß man natürlich mit angeben, als was die Datei codierungsmäßig zu interpretieren ist - sofern nicht am Dateianfang die "BOM" (Byte order mark) gefunden wird, welche relativ eindeutig besagt, dass es sich um eine Unicode-Codierung handelt, und um welche.

Mit der BOM kann man eindeutig UTF-32, UTF-16 und UTF-8 auseinanderhalten, und nur wenn eine eigene Textdatei zufällig eine dieser Bytemuster am Anfang enthält (was für Texte extrem unwahrscheinlich ist, viel wahrscheinlicher ist das bei Binärdateien, die man fälschlich für Texte hält), würde diese Erkennung fehlschlagen.

Das beantwortet ja auch fast vollständig die Frage des OP.

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

Du kannst deine Tastaturbelegung live umschalten. Windows zeigt dazu in der Taskleiste ein passendes Symbol an. Die ganze Chose findest du, wenn du neue Tastaturlayouts installierst.

Dann sollte das jetzt langsam Form annehmen ;-)

Alternativ muss man die Inhalte sonst eben wirklich _alle_ auslagern.

Das ist doch sowieso keine schlechte Idee, oder?

Nö. Das war die Grundidee. Nur als ich heute endlich damit anfing, habe ich mich gefragt, wie ich das machen könnte.

Ich werde jetzt folgendermaßen vorgehen:

Jede Seite erhält ein eingenes Subdirectory
in jedem Subdir wird eine index.php liegen
in jedem Subdir gibt es ein Template (.ht_template)
in jedem Subdir gibt es eine Content-Datei (.ht_content)

Template aufbauen.
Template-Editor aufbauen
  Der sucht alle Platzhalter aus dem Template heraus und erstellt daraus
  pro Sprache ein PHP-Array
  Bereits vorhandene Inhalte werden übernommen
  Die Seite wird mit "Blindtext" angezeigt, wenn keine Inhalte vorhanden sind
  Man kann in die Blindtexte klicken und damit ein Edit-Window öffnen
Die Inhalte können abgespeichert werden.

Die gesamte Struktur (Verzeichnisbaum) wird vorerst noch in englisch gehalten sein.

Wenn ich's zum Laufen bringe, wird als nächstes noch mittels Mod_Rewrite die Verzeichnisstruktur auf die betroffene Sprache angepasst...

Schaun wir mal.

Harzliche Grüße vom Berg
esst mehr http://www.harte-harzer.de

Tom

--
Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
Nur selber lernen macht schlau