tlawana: Probleme mit Zeichen *Anfängerfrage*

Hallo,
ich habe da mal eine Frage zu PHP:
Ich habe als value in einigen checkboxen "Sonderzeichen", wie z.B. sehr oft '§'.
Wenn ich abgeschickt hab, les ich die Daten aus, verarbeite sie, und gebe sie wieder aus. Das Paragraphzeichen kommt da als ein Rhombus mit Fragezeichen drin.
Woran liegt das?
Was kann man dagegen tun?

MfG

  1. echo $begrüßung;

    Wenn ich abgeschickt hab, les ich die Daten aus, verarbeite sie, und gebe sie wieder aus. Das Paragraphzeichen kommt da als ein Rhombus mit Fragezeichen drin.
    Woran liegt das?

    An einer falschen Kodierung.

    Was kann man dagegen tun?

    Du könntest dir Wissen aneignen über Zeichen, und wie diese im Computer dargestellt werden, z.B. die ersten drei Kapitel im Abschnitt Internationalisierung lesen. Anschließend könntest du dein Problem genauer analysieren und herausfinden, welche Kodierung die beteiligten Komponenten (z.B: Datenbanksystem, Browser) liefern bzw. erwarten und stattdessen bekommen.

    echo "$verabschiedung $name";

    1. Hallo,

      Wenn ich abgeschickt hab, les ich die Daten aus, verarbeite sie, und gebe sie wieder aus. Das Paragraphzeichen kommt da als ein Rhombus mit Fragezeichen drin.
      Woran liegt das?

      An einer falschen Kodierung.

      Nein, auf keinen Fall: <meta http-equiv="content-type" content="text/html; charset=utf-8">

      Das muss schon an PHP liegen, denn wenn ich einfach in den Quelltext § schreibe, wird das auch dargestellt, nur wenn ich die Daten mit PHP übergebe...

      MfG

      1. echo $begrüßung;

        Wenn ich abgeschickt hab, les ich die Daten aus, verarbeite sie, und gebe sie wieder aus. Das Paragraphzeichen kommt da als ein Rhombus mit Fragezeichen drin.
        Woran liegt das?
        An einer falschen Kodierung.
        Nein, auf keinen Fall: <meta http-equiv="content-type" content="text/html; charset=utf-8">

        Schön, das ist aber nur ein kleiner Teil der Miete. Ist der Text auch UTF-8-kodiert gespeichert worden? Sendet der Server einen gleichnamigen HTTP-Header mit einer anderslautenden charset-Angabe? (httpliveheaders-Extension im Firefox kann dazu dienlich sein)

        Das muss schon an PHP liegen, denn wenn ich einfach in den Quelltext § schreibe, wird das auch dargestellt, nur wenn ich die Daten mit PHP übergebe...

        "Daten mit PHP übergeben" kann man auf vielfältige Art und Weise. Beschreibe bitte nachvollziehbar.

        echo "$verabschiedung $name";

        1. Hallo,

          Das muss schon an PHP liegen, denn wenn ich einfach in den Quelltext § schreibe, wird das auch dargestellt, nur wenn ich die Daten mit PHP übergebe...

          "Daten mit PHP übergeben" kann man auf vielfältige Art und Weise. Beschreibe bitte nachvollziehbar.

          Ich übergebe sie via POST.

          MfG

          1. echo $begrüßung;

            Das muss schon an PHP liegen, denn wenn ich einfach in den Quelltext § schreibe, wird das auch dargestellt, nur wenn ich die Daten mit PHP übergebe...
            "Daten mit PHP übergeben" kann man auf vielfältige Art und Weise. Beschreibe bitte nachvollziehbar.
            Ich übergebe sie via POST.

            Wenn ich deine wenigen Informationen richtig deute, hast du eine Seite, auf der es ein Formular mit einem Eingabefeld gibt. Dieses wird an ein PHP-Script gesendet, welches eine Ausgabe für den Browser erzeugt, und da ist dieses Fragezeichen � zu sehen.

            Welche Kodierung verwendet die Formularseite, welche die Ergebnisseite? Welche Kodierung geben die beiden Seiten an den vorgesehenen Stellen an (HTTP-Header, META-Element)? Hat das Formular ein accept-charset-Attribut? Ist im HTTP-Verkehr der beiden Requests etwas Auffälliges in den charset-Angaben zu sehen? Wird das � wieder zum §, wenn du im Browser unter Ansicht die (Zeichen)kodierung zwischen UTF-8 und ISO-8859-1 wechselst?

            echo "$verabschiedung $name";

            1. Hallo,

              Ich übergebe sie via POST.

              Wenn ich deine wenigen Informationen richtig deute, hast du eine Seite, auf der es ein Formular mit einem Eingabefeld gibt. Dieses wird an ein PHP-Script gesendet, welches eine Ausgabe für den Browser erzeugt, und da ist dieses Fragezeichen � zu sehen.

              Welche Kodierung verwendet die Formularseite, welche die Ergebnisseite? Welche Kodierung geben die beiden Seiten an den vorgesehenen Stellen an (HTTP-Header, META-Element)? Hat das Formular ein accept-charset-Attribut?

                
              <meta http-equiv="content-type" content="text/html; charset=UTF-8">  
              
              
                
              echo '  
              <form action="'.$_SERVER['PHP_SELF'].'?page=end" method="POST"  accept-charset="UTF-8">  
               <input type="checkbox" name="test" value="§"> §  
               <input type="submit" value="Fertig!">  
              </form>';  
              
              

              Das war ein kleiner ausschnitt aus dem Formular und oben aus der selben Datei die meta angabe.

              Ist im HTTP-Verkehr der beiden Requests etwas Auffälliges in den charset-Angaben zu sehen?

              Nein.

              Wird das � wieder zum §, wenn du im Browser unter Ansicht die (Zeichen)kodierung zwischen UTF-8 und ISO-8859-1 wechselst?

              Nein.

              MfG

              1. Tag,

                Welche Kodierung verwendet die Formularseite, welche die Ergebnisseite? Welche Kodierung geben die beiden Seiten an den vorgesehenen Stellen an (HTTP-Header, META-Element)? Hat das Formular ein accept-charset-Attribut?

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

                
                > ~~~php
                  
                
                > echo '  
                > <form action="'.$_SERVER['PHP_SELF'].'?page=end" method="POST"  accept-charset="UTF-8">  
                >  <input type="checkbox" name="test" value="§"> §  
                >  <input type="submit" value="Fertig!">  
                > </form>';  
                > 
                
                

                Das war ein kleiner ausschnitt aus dem Formular und oben aus der selben Datei die meta angabe.

                Ist im HTTP-Verkehr der beiden Requests etwas Auffälliges in den charset-Angaben zu sehen?

                Meine Vermutung ist, die PHP-Seite/das Script hat nicht das richtige Encoding. Versuche Dir mal den Code mit einem HEX-Editor anzuschauen. Was steht da bei dem "§"?

                Grüße,
                Steffen.

              2. echo $begrüßung;

                Wird das � wieder zum §, wenn du im Browser unter Ansicht die (Zeichen)kodierung zwischen UTF-8 und ISO-8859-1 wechselst?
                Nein.

                Gib bitte das was beim PHP ankommt über bin2hex() aus, also: echo bin2hex($_POST['test']);
                Wenn das ein A7 ergibt, bekommst du vom Browser ISO-8859-1 oder Win-1252 übergeben. Kann man sich das Problem irgendwo online ansehen? Ich vermute dass du da noch eine ISO-8859-1-Einstellung übersehen hast.

                echo "$verabschiedung $name";

                1. Hallo,

                  Wird das � wieder zum §, wenn du im Browser unter Ansicht die (Zeichen)kodierung zwischen UTF-8 und ISO-8859-1 wechselst?
                  Nein.

                  Gib bitte das was beim PHP ankommt über bin2hex() aus, also: echo bin2hex($_POST['test']);
                  Wenn das ein A7 ergibt, bekommst du vom Browser ISO-8859-1 oder Win-1252 übergeben.

                  Es kommt "e2a720" raus.

                  Kann man sich das Problem irgendwo online ansehen? Ich vermute dass du da noch eine ISO-8859-1-Einstellung übersehen hast.

                  Nein, leider nicht: ist noch ein lokales Projekt...

                  MfG

                  1. Hallo,

                    Gib bitte das was beim PHP ankommt über bin2hex() aus, also: echo bin2hex($_POST['test']);
                    Wenn das ein A7 ergibt, bekommst du vom Browser ISO-8859-1 oder Win-1252 übergeben.
                    Es kommt "e2a720" raus.

                    Stop! Sorry, es kommt e2a7 raus (ich bin noch auf die Leertaste gekommen).

                    MfG

                    1. echo $begrüßung;

                      Gib bitte das was beim PHP ankommt über bin2hex() aus, also: echo bin2hex($_POST['test']);
                      Wenn das ein A7 ergibt, bekommst du vom Browser ISO-8859-1 oder Win-1252 übergeben.
                      [...] es kommt e2a7 raus [...]

                      E2 A7 ist keine gültige UTF-8-Sequenz. Da fehlt also noch ein Byte (für eine gültige Sequenz), oder du hast dich vertippt/verlesen und wolltest C2 A7 schreiben, oder irgendwer schickt was Falsches, das in keiner gängigen Kodierung sinnvoll ist.

                      echo "$verabschiedung $name";

      2. Tag,

        Nein, auf keinen Fall: <meta http-equiv="content-type" content="text/html; charset=utf-8">

        Das muss schon an PHP liegen, denn wenn ich einfach in den Quelltext § schreibe, wird das auch dargestellt, nur wenn ich die Daten mit PHP übergebe...

        wo läßt Du Dir das "Fragezeichen+Rombus" anzeigen.
        Vielleicht liegt es daran, daß der Texteditor, der Dir das anzeigt es "falsch" anzeigt. Versuche dieses Programm auf UTF-8 umzustellen.
        Oder vielleicht ist Deine PHP-Seite nicht korrekt UTF-kodiert. Könnte wiederum ein Problem Deines Editors sein.

        Grüße,
        Steffen.

        1. Tag,

          Nein, auf keinen Fall: <meta http-equiv="content-type" content="text/html; charset=utf-8">

          Das muss schon an PHP liegen, denn wenn ich einfach in den Quelltext § schreibe, wird das auch dargestellt, nur wenn ich die Daten mit PHP übergebe...

          wo läßt Du Dir das "Fragezeichen+Rombus" anzeigen.

          Im Browser (Opera, Firefox)

          MfG

  2. Hört sich nach einem Problem mit der Zeichenkodierung an (Hier würde ich mal auf latin <-> utf8 tippen).