Sieger: htmlentities verkorkst?

Hallo,

aus einem Formular wird eine Post-Variable namens d_text übermittelt. Sie kann alles Mögliche an Text enthalten, weswegen sie ein Sicherheitsrisiko für den Server darstellt.
Also möchte ich schon vor dem Einspeisen in die Datenbank die Variable d_text mit htmlentities entschärfen.

Folgenden Code habe ich:

  
 echo $_POST['d_text'];  
 $text=htmlentities($_POST['d_text']);  
 echo $text;  

Und Folgendes wird bei meinem Test mit "äöüß" ausgegeben:

äöüßäöüÃ�

Was ist da los?

Nebeninfo: In dem sendenden Formular ist kein enctype angegeben.

MfG
Sieger

  1. Ahoi Sieger,

    Und Folgendes wird bei meinem Test mit "äöüß" ausgegeben:
    äöüßäöüÃ�
    Was ist da los?

    ich würd das mal ganz frech auf die codierung schieben (utf vs. iso)

    außerdem dann noch die frage gibst du das so aus oder schreibst du es wieder in eine textarea.

    MfG

  2. aus einem Formular wird eine Post-Variable namens d_text übermittelt. Sie kann alles Mögliche an Text enthalten, weswegen sie ein Sicherheitsrisiko für den Server darstellt. Also möchte ich schon vor dem Einspeisen in die Datenbank die Variable d_text mit htmlentities entschärfen.

    Für diesen Anwendungsfall gibt es mysql(i)_real_escape_string. Was kümmert deine Datenbank irgendwelche HTML-Entities?

    Und Folgendes wird bei meinem Test mit "äöüß" ausgegeben:
    äöüßäöüÃ�
    Was ist da los?

    Ein Zeichensatzproblem?

    Siechfred

    --
    Ein Selbständiger ist jemand, der bereit ist, 16 Stunden am Tag zu arbeiten, nur um nicht 8 Stunden für einen Anderen arbeiten zu müssen.
    1. Hi
      danke an alle für die zahlreichen Antworten.

      Ein Zeichensatzproblem?

      Wie unterbinde ich dieses Problem? Am Browser kann es wohl eher nicht liegen, dann wohl am Formular, das die POST-Daten absendet.
      Ich schätze, es muss wohl das Attribut bei "enctype" am Formular richtig gesetzt werden. Welche Angabe ist da die richtige?

      MfG
      Sieger

      1. Hi

        Wie unterbinde ich dieses Problem? Am Browser kann es wohl eher nicht liegen, dann wohl am Formular, das die POST-Daten absendet.
        Ich schätze, es muss wohl das Attribut bei "enctype" am Formular richtig gesetzt werden. Welche Angabe ist da die richtige?

        Kurze Ergänzung: Es gibt in dem Formular, neben ebendieser Textarea mit namen d_text, auch (aber nur, wenn der User es auch will) ein Datei-Upload-Feld.

        MfG
        Sieger

        1. Ahoi Sieger,

          Ich schätze, es muss wohl das Attribut bei "enctype" am Formular richtig gesetzt werden. Welche Angabe ist da die richtige?

          Da schätzt du IMHO falsch, das Formular hat damit nichts zu tun, außer
          du würdest dort irgendwie den Contenttype ändern. Auf denn es letzlich
          an kommt, der gilt für das ganze element und wird im header angegeben:

            
          <html>  
            <head>  
              <meta http-equiv="content-type" content="text/html; charset=UTF-8">  
          
          

          z.B. für UTF-8

          ist keiner angegeben wird geraten.

          MfG

          1. Hi

            <meta http-equiv="content-type" content="text/html; charset=UTF-8">

            Wenn ich das angebe, passiert nix, es bleiben die Zeichen so wie sie waren.
            Wenn ich iso-8859-1 angebe, wirds nur noch schlimmer.

            Ich habe das mit den Zeichensätzen und deren Unterschiede nie kapiert. Wo ist der Unterschied zwischen UTF-8 und iso-8859-1? Und wenn die HTML-Seite so angegeben werden kann, warum kann man im Browser auch nochmal einen Zeichensatz angeben?

            MfG
            Sieger

            1. Hello out there!

              Ich habe das mit den Zeichensätzen und deren Unterschiede nie kapiert.

              Dazu ist es auch erforderlich, den Unterschied zwischen Zeichsatz und Zeichencodierung zu kapieren.

              Kurz gesagt: </archiv/2007/6/t154844/#m1009055>, </archiv/2007/5/t153210/#m997116>

              Auführlicher in http://jendryschik.de/wsdev/einfuehrung/grundlagen/zeichenkodierung

              See ya up the road,
              Gunnar

              --
              „Wer Gründe anhört, kommt in Gefahr nachzugeben.“ (Goethe)
              1. Hi

                Dazu ist es auch erforderlich, den Unterschied zwischen Zeichsatz und Zeichencodierung zu kapieren.
                Kurz gesagt: </archiv/2007/6/t154844/#m1009055>, </archiv/2007/5/t153210/#m997116>
                Auführlicher in http://jendryschik.de/wsdev/einfuehrung/grundlagen/zeichenkodierung

                Moment, mein Browser stellt doch alles richtig dar! Im Quelltext steht:

                äöüß&Atilde;&curren;&Atilde;&para;&Atilde;&frac14;&Atilde;�

                und der Browser wandelt die auch richtig um und stellt sie mir wie folgt dar:

                äöüßäöüÃ�

                Hier der Screenshot:

                http://img50.imageshack.us/img50/9168/zeichensaetzewu0.png (89,5 KB)

                Es läuft momentan alles richtig - mal davon abgesehen, dass htmlentities die Umlaute in die falschen Werte umwandelt.

                MfG
                Sieger

                1. hi,

                  Moment, mein Browser stellt doch alles richtig dar! Im Quelltext steht:

                  äöüß&Atilde;&curren;&Atilde;&para;&Atilde;&frac14;&Atilde;�

                  In welcher Kodierung diese Zeichen vorliegen, lässt sich daraus nicht erkennen.

                  und der Browser wandelt die auch richtig um und stellt sie mir wie folgt dar:

                  äöüßäöüÃ�

                  Es läuft momentan alles richtig -

                  Das klingt nach deiner bisherigen Beschreibung eher nach glücklichem Zufall.

                  mal davon abgesehen, dass htmlentities die Umlaute in die falschen Werte umwandelt.

                  Finde heraus, in welcher Kodierung du die Daten geliefert bekommst; überlege, in welcher du sie ausgibst/darstellen lässt.
                  Und schau dir anschliessend auch mal den optionalen dritten Parameter von htmlentities an.

                  gruß,
                  wahsaga

                  --
                  /voodoo.css:
                  #GeorgeWBush { position:absolute; bottom:-6ft; }
  3. Hi,

    Also möchte ich schon vor dem Einspeisen in die Datenbank die Variable d_text mit htmlentities entschärfen.

    der Grundsatz lautet: Wenn Du einen Wert in einen Kontext bringst, musst Du ihn kontextspezifisch kodieren. Kontextspezifisch, nicht willkürlich. Eine Datenbank ist kein HTML-Kontext.

    Cheatah

    --
    X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
    X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
    X-Will-Answer-Email: No
    X-Please-Search-Archive-First: Absolutely Yes