Michael: Umlaute umwandeln

Hi,

meine Benutzer können zur Verwaltung des Inhaltes Daten in ein HTML-Formular eingeben. Nun werden natürlich Umlaute wie äöü und andere Sonderzeichen nicht HTML-konform eingegeben. Ich kann ja schlecht von jedem Benutzer verlangen, dass er dies tut.

Wie kann man die Umlaute automatisch Umwandeln? Gibt es geeignete PHP-Funktionen oder könnte man die anzeige von normal getippten Umlauten im Browser durch einen entsprechenden Zeichensatz doch noch ermöglichen?

mfG, michael

  1. Hi,

    Nun werden natürlich Umlaute wie äöü und andere Sonderzeichen nicht HTML-konform eingegeben.

    Solche Umlaute _sind_ HTML-konform - wenn die Kodierung mit der des Dokumentes übereinstimmt.

    Wie kann man die Umlaute automatisch Umwandeln?

    In was umwandeln?

    Gibt es geeignete PHP-Funktionen

    Ja, aber warum?

    freundliche Grüße
    Ingo

    1. Hallo

      Wie kann man die Umlaute automatisch Umwandeln?
      In was umwandeln?

      Du verstehst zwar, was ich wissen möchte, da ich es aber mangels gewissen Kenntnissen nicht präzise ausdrücken kann, lässt du mich zappeln, stimmts? ;-)

      Also: Ein Textfeld in einem Formular -> übermittelter Wert wird in PHP per $_POST['meinTextfeld'] abgefragt -> abgefragter Wert wird in eine Datenbank gespeichert -> zu späterem Zeitpunkt wird der Datenbankeintrag wieder gelesen, in eine HTML-Seite eingefügt und gelangt so an den Browser. Was muss ich nun tun, damit die 'normal' eingegebenen Umlauten und Sonderzeichen aus dem Formularfeld auch wieder HTML-konform im Browser landen?

      Grus

      Michael

      1. Hi Michael,

        Also: Ein Textfeld in einem Formular -> übermittelter Wert wird in PHP per $_POST['meinTextfeld'] abgefragt -> abgefragter Wert wird in eine Datenbank gespeichert -> zu späterem Zeitpunkt wird der Datenbankeintrag wieder gelesen, in eine HTML-Seite eingefügt und gelangt so an den Browser. Was muss ich nun tun, damit die 'normal' eingegebenen Umlauten und Sonderzeichen aus dem Formularfeld auch wieder HTML-konform im Browser landen?

        Nichts. Zumindest soweit es die Umlaute betrifft. Warum willst du sie in irgendwas umwandeln? Lass doch ein 'ö' auch einfach als 'ö' in die Datenbank einfließen, so dass es auch als 'ö' wieder ausgelesen wird und als 'ö' im Browser erscheint. Wozu willst du es unbedingt in -vermutlich- ö umwandeln? Damit dein Quelltext nachher schlechter lesbar ist? Wenn du ein Charset verwendest, das diese Zeichen enthält (meist ISO-8859-1 oder UTF-8), ist es völlig unnötig, diese Zeichen nochmal umzucodieren.

        Worauf du allerdings _wirklich_ achten solltest, sind die HTML-Sonderzeichen '<', '>' und '&'. Die müssen tatsächlich in ihre entsprechende Entity-Schreibweise umgewandelt werden, damit sie bei der späteren Ausgabe im Browser keinen Unsinn anrichten. Dafür kannst du, wie mein Namensvetter schon (leider in falscher Schreibweise) vorgeschlagen hat, die PHP-Funktion htmlspecialchars() verwenden.

        Diese Umwandlung würde ich übrigens nicht schon beim Eintragen in die Datenbank machen, sondern erst, wenn der Text wieder an den Browser ausgegeben wird.

        Schönen Tag noch,
         Martin

        --
        F: Was ist wichtiger: Die Sonne oder der Mond?
        A: Der Mond. Denn er scheint nachts. Die Sonne dagegen scheint tagsüber, wenn es sowieso hell ist.
        1. Hi,

          Das wollte ich wissen!

          mfG und vielen Dank

          michael

  2. Moin,

    wenn du UTF-8 benutzt, musst du dich nur um ein paar Sonderzeichen kümmern, und das macht html_special_chars() für dich. Wenn du eine Zeichenkodierung benutzt, die vom Benutzer eingegebene Zeichen nicht kodieren kann, werden die meistens vom Browser in HTML-Maskierungen (&#8144; z. B.) umgewandelt, was nicht nur umständlich vom Maskieren der anderen Zeichen ausgenommen werden muss, sondern auch nicht eindeutig erkennen lässt, ob denn nun das Sonderzeichen oder tatsächlich diese Zeichenfolge gemeint war. Daher empfehle ich dringend, UTF-8 zu benutzen. Bei XML und damit auch XHTML ist das ohnehin Standard.

    Man kann übrigens auch dem Formular ein "accept-charset"-Attribut verpassen, soweit ich weiß wird diese Anweisung jedoch von den meisten Browsern ignoriert und immer die Zeichenkodierung verwendet, die auch zur Auslieferung der Seiten diente.

    Tschau,
    Martin