heinetz: Immer wieder Zeichensätze

Hallo Forum,

bei folgender Konstruktion habe ich mal wieder ein Problem mit den
Sonderzeichen:

form.php:
---------

<?  
$_SESSION['Thema'] = $_POST['Thema'];  
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">  
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de">  
 <body>  
  
<form method="post">  
 <select id="Thema" name="Thema" size="1" style="width:220px;">  
  <option <?=(($_SESSION['Thema']=="Mitgliedschaft und Beiträge")?'selected':'');?> value="Mitgliedschaft und Beiträge">Mitgliedschaft und Beitr&auml;ge</option>  
 </select>  
  
 </body>  
</html>

Kann mir jemand sagen, an welcher Stelle das Problem auftritt ?

ps. Das ganze ist vereinfacht dargestellt und es gibt Gründe,
das nicht grundlegend anders zu bauen, sondern innerhalb dieser
Konstruktion ein korrektes Zeichensatzhandling verweden.

danke für Tipps und

beste gruesse,
heinetz

  1. hi,

    was fürn Problem?

    [..]sondern innerhalb dieser
    Konstruktion ein korrektes Zeichensatzhandling verweden.

    Nunja, beginnne damit, dass Du Dein HTML in der gewünschten Zeichen_kodierung_  auslieferst.

    Und dann löse Dich mal von dem Begriff "Zeichensatz".

    Hotte

    --
    Wenn der Kommentar nicht zum Code passt, kann auch der Code falsch sein.
    1. Hi,

      Nunja, beginnne damit, dass Du Dein HTML in der gewünschten Zeichen_kodierung_  auslieferst.

      Sorry ich habe das metatag in meinem Beispielcode (im Original
      natürlich nicht) unterschlagen. so sieht's aus:

      form.php:
      ---------

      <?  
      $_SESSION['Thema'] = $_POST['Thema'];  
      ?>
      
      <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">  
      <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de">  
       <head>  
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />  
       </head>  
        
       <body>  
        
      <form method="post">  
       <select id="Thema" name="Thema" size="1" style="width:220px;">  
        <option <?=(($_SESSION['Thema']=="Mitgliedschaft und Beiträge")?'selected':'');?> value="Mitgliedschaft und Beiträge">Mitgliedschaft und Beitr&auml;ge</option>  
       </select>  
        
       </body>  
      </html>
      

      Und dann löse Dich mal von dem Begriff "Zeichensatz".

      verstehe nicht. warum soll ich mich nun davon lösen ?

      gruesse,
      heinetz

      1. @@heinetz:

        »» Und dann löse Dich mal von dem Begriff "Zeichensatz".
        verstehe nicht. warum soll ich mich nun davon lösen ?

        Weil du ihn falsch verwendest.

        Der Zeichensatz ist im HTML-Kontext immer UCS/Unicode. [QA-DOC-CHARSET]

        Den Unterschied zwischen Zeichensatz und Zeichencodierung kannst du in [QA-WHAT-IS-ENCODING] und bei [Jendryschik] nachlesen.

        Live long and prosper,
        Gunnar

        --
        Das einzige Mittel, den Irrtum zu vermeiden, ist die Unwissenheit. (Jean-Jacques Rousseau)
        1. ok,

          ich löse mih von dem Bergiff 'Zeichensatz' und spreche ab jetzt
          von 'Zeichencodierung'. Damit ist mein Problem jedoch leider
          nicht gelöst ;(

          Nochmal meine Baustelle etwas weniger vereinfacht

          sender.php
          ----------

          <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">  
          <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de">  
           <head>  
            <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />  
           </head>  
            
           <body>  
            
            <form method="post" action="recient.php">  
             <select id="Thema" name="Thema" size="1" style="width:220px;">  
              <option value="Mitgliedschaft und Beiträge">Mitgliedschaft und Beitr&auml;ge</option>  
             </select>  
            
           </body>  
          </html>
          

          recient.php
          -----------

          <?  
          $_SESSION['Thema'] = $_POST['Thema'];  
          ?>
          

          output.php
          ----------

          <?  
          echo ($_SESSION['Thema'] == "Mitgliedschaft und Beiträge");  
          ?>
          
          1. Ich wähle auf der Seite 'form.php' im Formular die Option
               "Mitgliedschaft und Beiträge" und schicke das Form ab.

          2. Die Seite 'recient.php', an die das Form abgesendet wurde,
               soll diesen Wert in der Variablen $_SESSION['Thema'] speichern.

          3. Beim Aufruf der Seite 'output.php' soll '1' ausgegeben werden,
               wenn der Wert der Variablen $_SESSION['Thema'] "Mitgliedschaft
               und Beiträge" ist.

          Mein Problem ist, dass bei der Prüfung unter 3 unwahr herauskommt.
          Ursächlich dafür ist, dass das 'ä' aus dem Formularwert nicht dem
          'ä' bei der Prüfung entspricht, obwohl es das augenscheinlich tut.

          an welchen Stellen sorge ich also dafür, dass das 'ä' zu jeder Zeit
          und an jeder Stelle dieser Konstruktion in utf8 kodiert ist bzw. wo
          muss ich es umcodieren ?

          danke und

          beste gruesse,
          heinetz

          1. hi,

            output.php

            [code lang=html]<?
            echo ($_SESSION['Thema'] == "Mitgliedschaft und Beiträge");

            ^ das vergleicht Zahlen (aber ich kann mich auch irren, jedenfalls ist das in Perl so)

            Dann prüf mal, in welcher Kodierung die php-Datei gespeichert wurde, in der geschrieben steht "Mitgliedschaft und Beiträge". Interessant wäre noch der Parser, der aus dem 'ä' was in UTF-8 als '%C3%A4' übertragen wurde tatsächlich ein 'ä' macht.

            Hotte

            --
            Wenn der Kommentar nicht zum Code passt, kann auch der Code falsch sein.
            1. hi,

              Dann prüf mal, in welcher Kodierung die php-Datei gespeichert wurde

              ja genau, das war wohl mein Problem. Die Dokumente sind alle in
              Windows-Latin gespeichert gewesen.

              gruesse,
              heinetz

          2. Hi,

            <option value="Mitgliedschaft und Beiträge">Mitgliedschaft und Beitr&auml;ge</option>

            1. Ich wähle auf der Seite 'form.php' im Formular die Option
                 "Mitgliedschaft und Beiträge" und schicke das Form ab.

            2. Die Seite 'recient.php', an die das Form abgesendet wurde,
                 soll diesen Wert in der Variablen $_SESSION['Thema'] speichern.

            3. Beim Aufruf der Seite 'output.php' soll '1' ausgegeben werden,
                 wenn der Wert der Variablen $_SESSION['Thema'] "Mitgliedschaft
                 und Beiträge" ist.

            Und aus welchem Grund nutzt du nicht gleich "1" als value der option?

            Die Umschlüsselung des Wertes "1" in "Mitgliedschaft und Beiträge" ist eine, die ausschliesslich für den Benutzer interessant ist - weil der sich darunter etwas vorstellen kann, unter "1" aber weniger.
            Aber für die Programmlogik ist "Mitgliedschaft und Beiträge" von kein bisschen mehr Bedeutung als eine "1", also kann die ruhig mit letzterer arbeiten.

            MfG ChrisB

            --
            Light travels faster than sound - that's why most people appear bright until you hear them speak.
      2. hi,

        »» Und dann löse Dich mal von dem Begriff "Zeichensatz".

        verstehe nicht. warum soll ich mich nun davon lösen ?

        Der Begriff kommt aus dem Druckerhandwerk (Setzkasten). Wir hingegen schaffen mit Zeichenkodierungen. Freilich ist die Anzahl der Zeichen, die kodiert werden können, der Zeichenvorrat also, abhängig vom Code und dessen Länge. Beispielsweise können mit 7 Bit ebend nur 127 Zeichen kodiert werden (ohne NULL). Bei 8 Bit sind es schon 255 Zeichen usw.

        Wenn Du Dein Form mit UTF-8 auslieferst und der Besucher ein 'ü' eintippst, macht der Browser beim Abschicken ein URI-encoding (früher hieß das escape), aus dem 'ü' wird ein '%C3%BC' und so geht das über den Draht.

        Hättest Du das HTML-Formular mit der Kodierung ISO-8859-1 zum Browser geschickt, würde aus dem 'ü' ein '%FC'.

        Mach Dir mal die Freude und rechne FC oder C3BC von hex nach dezimal. Im ersten Fall bekommst Du eine 252 und die passt noch in eine Kodierung, wo mit 8 Bit auskommt. Im zweiten Fall reichen 8 Bit nicht mehr, aber schau selbst...

        Schließlich wird der Begriff 'charset' oftmals als 'Zeichensatz' übersetzt, obwohl 'set' von 'setting' abgeleitet ist. <http://de.selfhtml.org/inter/index.htm@title=Siehe auch hier unter Internationalisierung>.

        Jetzt hättn wir das mal geklärt ;-)

        Was Dein CGI mit dem eingegebenen Zeichensalat macht, ist eine andere, aber nicht weniger interessante Sache und falls es damit Probleme gibt, her damit.

        Hotte

        --
        Wenn der Kommentar nicht zum Code passt, kann auch der Code falsch sein.