Onkel Schnitzel: Polnischer Eintrag im Gästebuch

Hallo,

ich habe vor lauter Schreck feststellen müssen, daß ich einen polnischen Eintrag im Gästebuch habe. Der wird nun nicht korrekt dargestellt, da ich meine Seiten mit ISO-8859-1 ausliefere. Ich hab n bißchen rumprobiert - sobald ich die polnischen Zeichen in die Datenbank schreibe, werden sie dort codiert dargestellt. Beim Auslesen aus der Datenbank, also im Gästebuch, werden die Zeichen dann ebenfalls codiert dargestellt, da ich natürlich htmlspecialchars verwende.

Hab ich irgendwelche Möglichkeiten, den Text korrekt darstellen zu lassen? Auf htmlspecialchars sollte ich wohl lieber nicht verzichten. Und eine Umstellung auf UTF-8 ist mir momentan zu aufwendig.

Gruß,
Onkel Schnitzel

  1. Hallo

    Hallo,

    ich habe vor lauter Schreck feststellen müssen, daß ich einen polnischen Eintrag im Gästebuch habe. Der wird nun nicht korrekt dargestellt, da ich meine Seiten mit ISO-8859-1 ausliefere. Ich hab n bißchen rumprobiert - sobald ich die polnischen Zeichen in die Datenbank schreibe, werden sie dort codiert dargestellt. Beim Auslesen aus der Datenbank, also im Gästebuch, werden die Zeichen dann ebenfalls codiert dargestellt, da ich natürlich htmlspecialchars verwende.

    Hab ich irgendwelche Möglichkeiten, den Text korrekt darstellen zu lassen? Auf htmlspecialchars sollte ich wohl lieber nicht verzichten. Und eine Umstellung auf UTF-8 ist mir momentan zu aufwendig.

    Schreibe die Daten _uncodiert_ in die DB und codiere sie ausschließlich dann , wenn sie dargestellt werden, also bei der Auslieferung.

    Tschö, Auge

    --
    Die Musik drückt aus, was nicht gesagt werden kann und worüber es unmöglich ist zu schweigen.
    (Victor Hugo)
    Veranstaltungsdatenbank Vdb 0.1
    1. Hallo Auge.

      Schreibe die Daten _uncodiert_ in die DB und codiere sie ausschließlich dann , wenn sie dargestellt werden, also bei der Auslieferung.

      Hm, wie stellst du dir das vor? Jedes Zeichen wird immer in irgend einer Kodierung gespeichert.

      Hier sollte die gespeicherte Kodierung mit der ausgelieferten überein stimmen.

      Einen schönen Freitag noch.

      Gruß, Ashura

      --
      sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:} fl:( ss:) ls:[ js:|
      „It is required that HTML be a common language between all platforms. This implies no device-specific markup, or anything which requires control over fonts or colors, for example. This is in keeping with the SGML ideal.“
      [HTML Design Constraints: Logical Markup]
      1. Hier sollte die gespeicherte Kodierung mit der ausgelieferten überein stimmen.

        Das ist ja gerade das Problem. Irgendjemand schreibt mit einem polnischen Editor (ISO-8859-2) einen Text und fügt den in meine Gästebuchdatenbank ein. Dort wird sie codiert gespeichert, weil die Datenbank anscheinend nur ISO-8859-1 "kann" und im Gästebuch erscheint natürlich auch nur der Code (weil ebenfalls ISO-8859-1).

        Gruß,
        Onkel Schnitzel

        1. Hallo

          Hier sollte die gespeicherte Kodierung mit der ausgelieferten überein stimmen.

          Das ist ja gerade das Problem. Irgendjemand schreibt mit einem polnischen Editor (ISO-8859-2) einen Text und fügt den in meine Gästebuchdatenbank ein. Dort wird sie codiert gespeichert, weil die Datenbank anscheinend nur ISO-8859-1 "kann" und im Gästebuch erscheint natürlich auch nur der Code (weil ebenfalls ISO-8859-1).

          Ahh ja. Der Text wird vom DBMS codiert, weil er nicht dem Charset des DBMS entspricht. Bei der Ausgabe wird der bereits codierte Text erneut codiert (maskiert).

          Verstehe ich das so richtig?

          Tschö, Auge

          --
          Die Musik drückt aus, was nicht gesagt werden kann und worüber es unmöglich ist zu schweigen.
          (Victor Hugo)
          Veranstaltungsdatenbank Vdb 0.1
          1. Ahh ja. Der Text wird vom DBMS codiert, weil er nicht dem Charset des DBMS entspricht. Bei der Ausgabe wird der bereits codierte Text erneut codiert (maskiert).

            Ja, genau.

            Aus dem Wort dzień wird dann in der DB und bei der Ausgabe dzień

            Ohne htmlspecialchars wäre die Ausgabe wieder korrekt.

            Gruß,
            Onkel Schnitzel

            1. Hallo

              Aus dem Wort dzień wird dann in der DB und bei der Ausgabe dzień

              Also DB:
              dzień

              HTML-Quelltext:
              dzień
              ?

              Tschö, Auge

              --
              Die Musik drückt aus, was nicht gesagt werden kann und worüber es unmöglich ist zu schweigen.
              (Victor Hugo)
              Veranstaltungsdatenbank Vdb 0.1
              1. Also DB:
                dzień

                HTML-Quelltext:
                dzień
                ?

                Ja, genau. Tut mir leid, daß ich mich so lange nicht gemeldet habe. Hatte so viel anderen Kram zu tun :-/

                Ich danke jedenfalls nochmal für eure Antworten. Ich lass jetzt erstmal alles wie es ist und hoffe einfach darauf, daß erstmal keine weiteren osteuropäischen Mitteilungen kommen ;-)

                Gruß,
                Onkel Schnitzel

        2. Moin!

          Das ist ja gerade das Problem. Irgendjemand schreibt mit einem polnischen Editor (ISO-8859-2) einen Text und fügt den in meine Gästebuchdatenbank ein. Dort wird sie codiert gespeichert, weil die Datenbank anscheinend nur ISO-8859-1 "kann" und im Gästebuch erscheint natürlich auch nur der Code (weil ebenfalls ISO-8859-1).

          Das Problem liegt im verwendeten Browser!

          Die Formularseite ist ISO-8859-1, jeder Browser sendet dann auch nur ISO-8859-1 zurück. Was aber passiert mit Zeichen, die der Benutzer eingeben konnnte (weil die Textarea im Browser grundsätzlich das gesamte Unicode-Repertoire akzeptiert), die aber nicht in ISO-8859-1 codiert werden können?

          Antwort: Entweder sie werden zu Fragezeichen "umcodiert" und gehen verloren.

          Oder sie werden vom Browser zu numerischen Zeichenreferenzen umcodiert - und gehen damit auch verloren.

          Denn man kann anhand der Formulardaten nicht mehr feststellen, ob der Benutzer nun die Originalzeichen eingegeben hat, oder die Numerischen Zeichenreferenzen - nur mal angenommen, es würde in einem Gästebucheintrag eine Frage gestellt, wie man das Zeichen "Lj" (bzw. &456;) darstellen/eingeben/verarbeiten kann - und das Zeichen selbst würde ebenfalls zur Zeichenfolge "&456;" gewandelt.

          Du kommst daher nicht drum herum, entweder hinzunehmen, dass fremdländische Zeicheneingaben entweder nicht funktionieren (einen Ansturm von numerischen Zeichenreferenzen in den Formulardaten könntest du ja durch eine auf diesen Sonderfall abgestimmte Fehlermeldung erklären und zurückweisen) oder zumindest zerstört aussehen (weil du nicht auf die Konvertierung des &-Zeichens in &amp; verzichten kannst, und (viel wichtiger) das < immer in &lt; geschrieben werden muß, sonst kriegst du Cross Scripting Attacken!) - oder du steigst doch auf eine Unicode-Codierung um (UTF-8 würde sich anbieten).

          Übeltäter ist hierbei übrigens der Firefox, der sich in solch unspezifizierter Weise hervortut. Und auch sonst sieht die Unterstützung für Zeichencodierung in Formularen browserübergreifend ziemlich mau aus - lediglich Opera teilt mit, welche Codierung benutzt wurde, was beispielsweise die Auflistung mehrerer Codierungsschemata im accept-encoding-Attribut verbietet, weil man nicht sicher feststellen kann, welche der Alternativen der Browser benutzt hat.

          - Sven Rautenberg

          --
          My sssignature, my preciousssss!
          1. Hallo Sven,

            was beispielsweise die Auflistung mehrerer Codierungsschemata im accept-encoding-Attribut verbietet, weil man nicht sicher feststellen kann, welche der Alternativen der Browser benutzt hat.

            UTF-8 vs. ISO-8859-1 kann man durchaus unterscheiden (das CForum hat das lange Zeit verwendet, bevor hier komplett auf UTF-8 umgestellt wurde): Man erstellt ein Hidden-Feld, das so aussieht: <input type="hidden" name="irgendwas" value="&#255;"> In ISO-8859-1 wird das Zeichen dann als 1 Byte mit dem Wert 0xFF kodiert (ISO-8859-* sind 1-Byte-Zeichenkodierungen), in UTF-8 wird das Zeichen dann als 2 Byte mit den Werten 0xC3 0xBF kodiert - so kann man UTF-8 von ISO-8859-1 unterscheiden (man kann statt &#255; natürlich auch jedes andere beliebige in ISO-8859-1 gültige Zeichen nutzen, das in UTF-8 mit 2 Byte kodiert werden würde). Analog ginge ISO-8859-2 von UTF-8, wenn man statt &#255; ein Zeichen wählen würde, das in ISO-8859-2 kodierbar wäre (z.B. &#729 - in ISO-8859-2 wäre das 0xFF, in UTF-8 wäre das 0xCB 0x99). Hmm, mir fällt gerade auf: Man könnte das fortsetzen, in dem man für jede ISO-Kodierung ein Formularfeld erstellt und dann prüft, bei welchem Formularfeld 0xFF drin steht, dann würde man sogar ISO-8859-1 von ISO-8859-2 unterscheiden können. Wäre natürlich ein gehöriger Aufwand. ;-)

            Viele Grüße,
            Christian

            --
            "I have always wished for my computer to be as easy to use as my telephone; my wish has come true because I can no longer figure out how to use my telephone." - Bjarne Stroustrup