Programmierheini: Umlautprobleme

Moin Leute,

folgende Sachlage:

mein php-Script startet im <head> mit folgender Zeile
[..
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
..]

Im Script selbst wird eine selekt-Box dargestellt in der es neben vielen anderen Begriffen auch das Wort ´Übergabe´ gibt, welches ich im Script mit ´&Uuml;bergabe´ schreibe.

Nach erneutem Aufruf des selbsen Scripts soll die zuvor eingegebene Selektion ausgegeben werden, wobei jedoch bei der Selektion ´Übergabe´ ein weiteres Event statt finden soll.
Daher verwende ich die If-Anweisung ´if ($selektion=="Übergabe")´ was allerdings vom Script als false ausgegeben wird. Ebenso mit ´if ($selektion=="&Uuml;bergabe")´.

Wie mache ich es richtig?

thx

  1. Tach!

    Im Script selbst wird eine selekt-Box dargestellt in der es neben vielen anderen Begriffen auch das Wort ´Übergabe´ gibt, welches ich im Script mit ´&Uuml;bergabe´ schreibe.

    Warum verst&uuml;st du die Umlaute und schreibst sie nicht direkt in der angegebenenen Kodierung in den Text?

    Daher verwende ich die If-Anweisung ´if ($selektion=="Übergabe")´ was allerdings vom Script als false ausgegeben wird. Ebenso mit ´if ($selektion=="&Uuml;bergabe")´.

    Dann wird wohl irgendwas anderes ankommen.

    Wie mache ich es richtig?

    Indem du erst einmal untersuchst, was das eigentliche Problem ist: echo urlencode($selektion); lässt sich gut missbrauchen, um sich die Hexwerte aller Bytes von Nicht-ASCII-Buchstaben anzuschauen.

    Andererseits kannst du dir auch den Themenkomplex Zeichenkodierung anschauen und schauen, was bei dir anders ist.

    dedlfix.

    1. Warum verst&uuml;st du die Umlaute und schreibst sie nicht direkt in der angegebenenen Kodierung in den Text?

      Dann erscheint im Browser der Begriff ´�bertrag´

      Indem du erst einmal untersuchst, was das eigentliche Problem ist: echo urlencode($selektion); lässt sich gut missbrauchen, um sich die Hexwerte aller Bytes von Nicht-ASCII-Buchstaben anzuschauen.

      Wenn ich urlencode nutze erscheint bei mir ´%C3%9Cbergabe´

      Was sagt mir das jetzt?

      thx

      1. Om nah hoo pez nyeetz, Programmierheini!

        Was sagt mir das jetzt?

        Dass du das lesen solltest, was dir verlink wurde.

        Matthias

        --
        1/z ist kein Blatt Papier.

        1. Dass du das lesen solltest, was dir verlink wurde.

          Also was ich so aus diesem Link erlese ist, dass man möglichst im <head> die Zeilen:
          <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
          und
          <meta charset="utf-8">
          einfügen sollte. - Das habe ich auch gemacht.

          Des weiteren steht dort geschrieben, dass man Sonderzeichen möglichst Direkt nutzen sollte und lediglich bei Ausnahmen die NCRs einsetzen sollte.
          Alternativ kann man auch die Entity-Markierung & und ; nutzen - was ich ebenfalls korrekt eingesetzt habe.

          Somit habe ich die Vorrausetzungen bzw. Regeln für Erkennung und Verwendung unter Nutzung von HTML meiner Meinung nach korrekt angewendet.

          Bleibt also noch die Korrekte Anwendung von PHP.
          Dazu lande ich in meinen Linkverstrickungen immer wieder auf der ToDO-Tabelle, die mir 174 Themen anbietet. Ich wäre Euch sehr verbunden, wenn Ihr mir an dieser Stelle nochmal einen pieps melden würdet, durch welche dieser 174 Türen es für mein Anliegen wärmer wird :)

          Besten Dank und bis Montag

          thx

          1. @@Programmierheini:

            nuqneH

            Also was ich so aus diesem Link erlese ist, dass man möglichst im <head> die Zeilen:
            <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
            und
            <meta charset="utf-8">
            einfügen sollte. - Das habe ich auch gemacht.

            Nein, nicht UND, sondern ENTWEDER ODER. Für (X)HTML5 erstes, für alte (X)HTML-Versionen zweites. [qa-html-encoding-declarations]

            Entscheidend bleibt aber, was dein Server im HTTP-Header angibt. Und natürlich musst du deine Dateien auch in der entsprechenden Zeichencodierung speichern. [qa-changing-encoding]

            Des weiteren steht dort geschrieben, dass man Sonderzeichen möglichst Direkt nutzen sollte und lediglich bei Ausnahmen die NCRs einsetzen sollte.

            Umlaute sind keine „Sonderzeichen“.

            Alternativ kann man auch die Entity-Markierung & und ; nutzen - was ich ebenfalls korrekt eingesetzt habe.

            '&' ist in HTML ein Sonderzeichen. '<' auch.

            Mit „Entity-Markierung“ meinst du Zeichen-Entity-Referenz (was eine im Gegensatz zu NCRs für Menschen besser lesbare Form von Zeichenreferenzen ist).

            Und nein, diese sollte man eben nicht nutzen. [qa-escapes] Außer bei den im Artikel genannten Ausnahmen.

            Qapla'

            --
            „Talente finden Lösungen, Genies entdecken Probleme.“ (Hans Krailsheimer)
            1. Hi!

              <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
              und
              <meta charset="utf-8">

              Nein, nicht UND, sondern ENTWEDER ODER. Für (X)HTML5 erstes, für alte (X)HTML-Versionen zweites.

              Du meintest bestimmt andersrum.

              FG Ulysses

              1. @@Ulysses:

                nuqneH

                Du meintest bestimmt andersrum.

                Ganz bestimmt.

                Qapla'

                --
                „Talente finden Lösungen, Genies entdecken Probleme.“ (Hans Krailsheimer)
          2. Tach!

            Also was ich so aus diesem Link erlese ist, dass man möglichst im <head> die Zeilen: [...] einfügen sollte. - Das habe ich auch gemacht.
            Des weiteren steht dort geschrieben, [...]
            Somit habe ich die Vorrausetzungen bzw. Regeln für Erkennung und Verwendung unter Nutzung von HTML meiner Meinung nach korrekt angewendet.

            Die folgende Antwort ist in englischer Sprache verfasst:

            Auf der Seite http://wiki.selfhtml.org/wiki/Themen:Zeichencodierung/Webdokumente habe ich noch den Satz "Natürlich muss die Angabe einer Codierung auch mit der tatsächlich verwendeten Codierung übereinstimmen." ergänzt, damit das hoffentlich noch etwas klarer wird.

            Wie jetzt, das war doch kein Englisch? Aber ich hab doch angegeben, dass das Englisch sein soll. Warum funktioniert das denn nicht?

            Bleibt also noch die Korrekte Anwendung von PHP.

            Es sollte helfen, UTF-8 wirklich zu verwenden und nicht nur anzugeben.

            dedlfix.

          3. Moin!

            Speichere Deine Dateien bitte auch alle als UTF-8 ab, wenn Du deinem Browser schon sagst, daß es UTF-8 ist. Nicht mehr und noicht weniger wurde Dir hier gesagt.

            Wenn es immernoch hapert, sendet Dein Server evtl. etwas anderes in den Dokumentheadern. Ändere das dann auch.

            --
            Signaturen sind blöd!
      2. Tach!

        Warum verst&uuml;st du die Umlaute und schreibst sie nicht direkt in der angegebenenen Kodierung in den Text?
        Dann erscheint im Browser der Begriff ´�bertrag´

        Du hast anscheinend den Teil "in der angegebenen Kodierung" missachtet. Es reicht nicht, auf einen Briefumschlag 100 € draufzuschreiben. Allein davon wandert kein Geld hinein. Allein von einer Charset-Angabe wird ein Editor nicht dazu veranlasst, in einer bestimmten Kodierung abzuspeichern.

        Wenn ich urlencode nutze erscheint bei mir ´%C3%9Cbergabe´
        Was sagt mir das jetzt?

        Das sagt dir, dass du die Bytes C3 9C für dein Ü bekommst. Wenn das nicht mit der "Übergabe" im Code übereinstimmt, dann ist das Code-Ü nicht C3 9C, sondern ... urlencode() zeigt auch hier die Antwort.

        dedlfix.