Dieter Raber: gettext emulator, htmlentities, utf-8

Hallo,

Beim folgenden Problem beziehe ich auf die in Europa gaengigen Sprachen, also auch z.B. Tuerkisch und Russisch, sodass der Latin-1-Zeichensatz nicht ausreicht. Sprachen, deren Zeichensaetze voellig anders funktionieren, wie Arabisch oder Japanisch koennen erst mal aussen vor bleiben.

Weil das GNU-Utility gettext bei den meisten Providern nicht installiert ist, habe ich eine  Klasse in PHP geschrieben die es zumindest teilweise emuliert. Im Prinzip wird dabei ein .po-File geparst alle msgid kommen in ein Array, alle msgstr in einen zweiten. Dem Header kann ich entnehmen, wie die Datei kodiert ist. Probleme entstehen dann, wenn ich htmlentities() mit der gefundenen Codierung als drittes Argument benutze (merkwuerdige Zeichen werden ausgegeben).

Ich ueberlege jetzt, die Uebersetzung unhtmlentisiert zurueckzugeben und grundsaetzlich sowohl fuer die .po-Dateien als auch die HTML-Seite UTF-8 vorzuschreiben. Nach meinem Verstaendnis erlaubt UTF-8 im HTML-Quelltext auch die Verwendung von Sonderzeichen, Umlauten etc.

Sehe ich das mit UTF-* richtig und wenn nicht, weiss jemand eine Loesung fuer das htmlentities-Problem?

Dieter

  1. Moin!

    Ich ueberlege jetzt, die Uebersetzung unhtmlentisiert zurueckzugeben und grundsaetzlich sowohl fuer die .po-Dateien als auch die HTML-Seite UTF-8 vorzuschreiben. Nach meinem Verstaendnis erlaubt UTF-8 im HTML-Quelltext auch die Verwendung von Sonderzeichen, Umlauten etc.

    Genauso, wie man in ISO-8859-1 unentitisierte deutsche Umlaute in den Text schreiben darf, darf man bei UTF-8 unentitisierte Unicode-Zeichen in den Text schreiben. Es ist grundsätzlich eine gute Sache, das gesamte System auf UTF-8 aufzubauen - du muß dabei allerdings streng dafür sorgen, dass deine Systeme diese Codierung dann auch einhalten. Kritisch sind da gerne mal Editoren. :)

    - Sven Rautenberg

    1. Hallo Sven,

      Genauso, wie man in ISO-8859-1 unentitisierte deutsche Umlaute in den Text schreiben darf, darf man bei UTF-8 unentitisierte Unicode-Zeichen in den Text schreiben.

      Ich kann also problemlos ä anstatt & #228 ; schreiben und das gilt auch fuer zb. Tuerkisch und russisch.

      Kritisch sind da gerne mal Editoren. :)
      Bei mir gibt's nur UltraEdit und solche Sachen, da muss ich wohl nicht so vor fuerchten.

      Danke fuer Deine Antwort

      Dieter

      1. Moin!

        Ich kann also problemlos ä anstatt & #228 ; schreiben und das gilt auch fuer zb. Tuerkisch und russisch.

        Wenn du die Schriftzeichen "original" eintippst, und dein Editor diese Zeichen als UTF-8 speichert, und du die Webseite mit dem "charset" UTF-8 an den Browser schickst (bedenke, dass diese Angabe sowohl in den Meta-Tags, als auch im HTTP-Header stimmen muß), dann sollten keinerlei Probleme auftreten.

        Kritisch sind da gerne mal Editoren. :)
        Bei mir gibt's nur UltraEdit und solche Sachen, da muss ich wohl nicht so vor fuerchten.

        Ich kenne Ultraedit nicht. Wenn der UTF-8 kann, ist alles in Ordnung. Aber UTF-8-Unterstützung muß man leider oft noch mit der Lupe suchen: Phase5 kanns nicht, Weaverslave kanns nicht. Ich habe UniRed entdeckt, der sieht aber grausam aus und hat keine gute Unterstützung für die "typischen" Webprobleme, insbesondere kein Syntaxhighlighting. Ultraedit kostet (Shareware), und bietet mir vermutlich keine Plugin-Schnittstelle für meinen Tabellenzerleger an.

        Tja, Unicode ist halt doch ein relativ großer Schritt für die Menschheit - endlich mal weggehen vom simplen byteorientierten Begriff des "Zeichens" scheint offenbar größere Probleme aufzuwerfen.

        - Sven Rautenberg

    2. Es ist grundsätzlich eine gute Sache, das gesamte System auf UTF-8 aufzubauen - du muß dabei allerdings streng dafür sorgen, dass deine Systeme diese Codierung dann auch einhalten. Kritisch sind da gerne mal Editoren. :)

      MS Notepad kann UTF-8.
      Besser (nicht nur) für die XML-Editierung ist natürlich Visual Studio.NET geeignet.

      Gruß,
      KonRad -

      --
      »Choose life.« - Trainspotting, drug addict
      »Choose life.« - Deuteronomy 30.19, GOD
      1. Moin!

        Es ist grundsätzlich eine gute Sache, das gesamte System auf UTF-8 aufzubauen - du muß dabei allerdings streng dafür sorgen, dass deine Systeme diese Codierung dann auch einhalten. Kritisch sind da gerne mal Editoren. :)

        MS Notepad kann UTF-8.

        Wenn du da noch eine Version zu angibst, wäre die Information sogar brauchbar. :) Mein Notepad hat da jedenfalls keine Unterstützung eingebaut.

        - Sven Rautenberg

      2. Hallo,

        MS Notepad kann UTF-8.

        TextPad auch. Da kann man den Zeichensatz und das Betriebssytem sogar aussuchen. Aber wenn ich das richtig verstehe (muß mich für die Zitatesammlung auch gerade mit diesem leidigen Thema beschsäftigen), stellen ISO-8859-1 Editoren halt die Kodierung dar, also ggf. zwei oder drei Zeichen, und ein Editor, der's "kann" eben das Zeichen, das gemeint ist oder?

        Aber die Bytefolge in der gespeicherten Datei sollte doch wohl die gleiche bleiben oder?

        Gruß, Andreas

        --
        <img src="http://was-ist-das.andreas-lindig.de/was_ist_das_fetzen.jpg" border="0" alt="">
        hier könnte auch ruhig mal'n neues Bild stehen.
        1. Moin!

          Aber die Bytefolge in der gespeicherten Datei sollte doch wohl die gleiche bleiben oder?

          Das Problem ist nicht das "ist in der Datei drin und wird nicht verändert", sondern das Eingeben von neuem Text. In einem ISO-8859-1-Editor wird der Buchstabe "ä" immer als binäre 0xE4 gespeichert werden, aber nicht als UTF-8-Zeichen (das zwei Byte hat, die ich nicht auswendig kann :) ).

          Das bedeutet: Existierendes UTF-8 bleibt intakt, auch wenn es nicht sehr ansehnlich aussieht, aber man hat Schwierigkeiten, neuen Text mit anderen als 7-Bit-ASCII-Zeichen hinzuzufügen.

          - Sven Rautenberg

          1. Das Problem ist nicht das "ist in der Datei drin und wird nicht verändert", sondern das Eingeben von neuem Text. In einem ISO-8859-1-Editor wird der Buchstabe "ä" immer als binäre 0xE4 gespeichert werden, aber nicht als UTF-8-Zeichen (das zwei Byte hat, die ich nicht auswendig kann :) ).

            ä = ä
            ö = ö
            ü = ü

            für's Archiv ;-)