Darkseth: Codierungs/Decodierungs Fehler bei Ausgabe

Guten Tag und Hallo,

ich habe ein kleines Problem beim übertragen einer Variable an ein anderes Fenster.

Ich habe ein Formular erstellt in dem eine Anzeige gemacht wird, dieses soll an eine Druckansicht übergeben werden, so weit so gut, wenn ich die Druckansicht jetzt öffne wird alles richtig angezeigt, ausser das "§" Zeichen, dass vorher vollkommen richtig angezeigt wurde.

Ich bitte um konstruktive hilfe, es ist ziemlich dringend.

MfG Darkseth

--

--- Wer Rechtsschreibfehler findet, darf sie behalten ---
  1. Die Fehlerbeschreibung ist unbrauchbar. Lies Tipps für Fragende und formuliere neu, um das Problem nachvollziehbar zu machen.

    1. Guten Tag und Hallo,

      Habe ein Formular erstellt, dass bestimmte Daten und Richtlinien mit § erfasst, diese sind in der Datenbank richtig angezeigt.

      Ich habe ein Anzeigeformular in dem ich die in der Datenbank eingetragenen Daten ausgebe. Die Ausgaben sind richtig auch das "§".

      Ich habe eine Druckansicht auf der Ich durch das Anzeige Formular die Daten übergebe. An diesem Punkt wird aus dem "§" ein "?".

      MfG Darkseth

      --

      --- Wer Rechtsschreibfehler findet, darf sie behalten ---
      1. Tach!

        Habe ein Formular erstellt, dass bestimmte Daten und Richtlinien mit § erfasst, diese sind in der Datenbank richtig angezeigt.
        Ich habe ein Anzeigeformular in dem ich die in der Datenbank eingetragenen Daten ausgebe. Die Ausgaben sind richtig auch das "§".
        Ich habe eine Druckansicht auf der Ich durch das Anzeige Formular die Daten übergebe. An diesem Punkt wird aus dem "§" ein "?".

        Man kann dir mit der ungenauen Schilderung nur eins sagen: Du machst etwas falsch oder du unterlässt etwas, das zum erfolgreichen Ergebnis unerlässlich ist. Und dann könnte man raten, was das sein könnte, denn die Ursachen für Zeichenverlust können konkret viele sein. Allgemein ist es oft so, dass sich der Programmierer nicht im Klaren ist, an welchen Stellen überall seine Daten von einem System ins andere wechseln, und dass er versäumt hat, jedem Zielsystem mitzuteilen, in welcher Kodierung die übertragenen Daten gesendet werden. Teil zwei des Problems ist, dass jedes System an sich mit der gewählten Kodierung umgehen muss, wenn es nicht nur ein reiner Durchreicher ist.

        Du kannst dein Problem also lösen, indem du zum einen sicherstellst, dass jedes beteiligte System mit der gewählten Kodierung umgehen kann, und indem du zum anderen die Stellen ermittelst, an denen eine Datenübertragung stattfindet, und bei diesen herausfindest sowie das dann implementierst, wie man dem Zielsystem die Kodierung der Daten mitteilt. Außerdem musst du natürlich sicherstellen, dass die Daten tatsächlich in der angegebenene Kodierung vorliegen. Wenn du nun immerzu Kodierung gehört hast und gar nicht weißt, wie das mit den <del>Blumen und Bienen</del><ins>Zeichen und den Computern</ins> so abläuft, dann brauchst du erst einmal Grundlagenliteratur: SELFHTML-Wiki: Zeichenkodierung

        dedlfix.

      2. Moin!

        Guten Tag und Hallo,

        Habe ein Formular erstellt, dass bestimmte Daten und Richtlinien mit § erfasst, diese sind in der Datenbank richtig angezeigt.

        Ich habe ein Anzeigeformular in dem ich die in der Datenbank eingetragenen Daten ausgebe. Die Ausgaben sind richtig auch das "§".

        Ich habe eine Druckansicht auf der Ich durch das Anzeige Formular die Daten übergebe. An diesem Punkt wird aus dem "§" ein "?".

        Du hast ein Encodingproblem, denn das Paragraphenzeichen liegt außerhalb des ASCII-Bereichs und ist deshalb anfällig für Probleme zwischen ISO-8859-1, Windows-1252 und UTF-8.

        Mehr kann man allerdings nicht sagen. Sorge für korrektes Encoding, mutmaßlich auch für korrektes Escaping an der Stelle, wo du den Paragraphen verwendest, und es könnte funktionieren.

        - Sven Rautenberg

        1. Guten Tag und Hallo

          Das Übergeben habe ich wie folgt gelöst,

            
                <form action="druck.php" method="post" target="popup"  onSubmit="window.open('druck.php','popup','scrollbars=1, width=800,height=600')">  
                  <input type="hidden" value="<?php echo "$aktuellesdatum"; ?>" name="aktuellesdatum">  
                  <input type="hidden" value="<?php echo "$pruefer"; ?>" name="pruefer">  
                  <input type="hidden" value="<?php echo "$naechstepruefung"; ?>" name="naechstepruefung">  
                  <input type="hidden" value="<?php echo "$bgva3urteil"; ?>" name="bgva3urteil">  
                  <input type="hidden" value="<?php echo "$sichtpruefungurteil"; ?>" name="sichtpruefungurteil">  
                  <input type="hidden" value="<?php echo "$sichtpruefung"; ?>" name="sichtpruefung">  
                  <input type="hidden" value="<?php echo "$messungmaengel"; ?>" name="messungmaengel">  
                  <input type="hidden" value="<?php echo "$pruefungsrelevanz"; ?>" name="pruefungsrelevanz">  
                  <input type="hidden" value="<?php echo "$schutzklasse"; ?>" name="schutzklasse">  
                  <input type="hidden" value="<?php echo "$dokumentation"; ?>" name="dokumentation">  
                  <input type="hidden" value="<?php echo "$geraetebezeichnung"; ?>" name="geraetebezeichnung">  
                  <input type="hidden" value="<?php echo "$anlass"; ?>" name="anlass">  
                  <input type="hidden" value="<?php echo "$inventarnummer"; ?>" name="inventarnummer">  
                  <input type="hidden" value="<?php echo "$schutzmassnahmen"; ?>" name="schutzmassnahmen">  
                  <input type="hidden" value="<?php echo "$idnummer"; ?>" name="idnummer">  
          <input type="submit" value="Druckansicht">
          

          das Annehmen in der Druck.php so:

          $aktuellesdatum = nl2br($_POST["aktuellesdatum"]);  
          $pruefer = nl2br($_POST["pruefer"]);  
          $naechstepruefung = nl2br($_POST["naechstepruefung"]);  
          $bgva3urteil = nl2br($_POST["bgva3urteil"]);  
          $sichtpruefungurteil = nl2br($_POST["sichtpruefungurteil"]);  
          $schutzmassnahmen = nl2br($_POST["schutzmassnahmen"]);  
          $messungmaengel = nl2br($_POST["messungmaengel"]);  
          $sichtpruefung = nl2br($_POST["sichtpruefung"]);  
          $pruefungsrelevanz = nl2br($_POST["pruefungsrelevanz"]);  
          $schutzklasse = nl2br($_POST["schutzklasse"]);  
          $dokumentation = nl2br($_POST["dokumentation"]);  
          $anlass = $_POST["anlass"];  
          $inventarnummer = nl2br($_POST["inventarnummer"]);  
          $idnummer = nl2br($_POST["idnummer"]);  
          $geraetebezeichnung = nl2br($_POST["geraetebezeichnung"]);
          

          MfG Darkseth

          --

          --- Wer Rechtsschreibfehler findet, darf sie behalten ---
          1. Tach!

            Das Übergeben habe ich wie folgt gelöst,

            In dem Code ist nichts zu sehen, das sich mit Zeichenkodierung beschäftigt. Allerdings sind das auch nicht die Stellen, an denen man diesbezüglich Angaben machen muss. Da du aber nicht konkret auf die bisher nur allgemein gebbaren Hinweise eingehst, sondern ausweichend antwortest, scheint mir, dass du noch kein Verständnis für die Problematik aufzubringen in der Lage bist. Wenn ich das auf das gesamte Projekt "hochrechne", scheinst du überhaupt keine Angaben zur Zeichenkodierung gemacht zu haben, verlässt dich also auf den Zufall, und der spielt nicht zu deinen Gunsten mit. Bitte beschäftige dich mit den bereits verlinkten Grundlagen. Letztlich musst du verstehen, an welchen Stellen eine Zeichenkodierungsangabe eine Rolle spielt. Du muss nämlich im gesamten Verarbeitungsprozess die für das jeweilige Zielsystem notwendigen korrekten Angaben setzen, um nicht wieder einen vermeidbaren Zufall im Spiel zu haben.

            Noch ein anderes Thema:

            das Annehmen in der Druck.php so:
            $aktuellesdatum = nl2br($_POST["aktuellesdatum"]);
            $anlass = $_POST["anlass"];

            Es ist ein weit verbreitetet Irrtum unter den PHP-Anfängern, dass man die Werte in $_POST etc. "annehmen" müsse. Das muss man nicht, man kann direkt damit arbeiten, ohne sie in andere Variablen umzukopieren. In deinem Fall hast du zwar durch die nl2br()-Funktion außer beim "Anlass" keine 1:1-Kopie, trotzdem ist hier Verbesserungspotential enthalten. Damit \n-Zeilenumbrüche in HTML dargestellt werden, ist natürlich nl2br() ein probates Mittel, aber die HTMLisierung wird nicht bei der Eingabe sondern erst bei der Ausgabe benötigt.

            Und außerdem empfehle ich dir auch noch den Kontextwechsel-Artikel, damit du ein Verständnis für die in deinem Code enthaltenen Sicherheitslücken bekommst.

            dedlfix.

            1. @@dedlfix:

              nuqneH

              Und außerdem empfehle ich dir auch noch den Kontextwechsel-Artikel, damit du ein Verständnis für die in deinem Code enthaltenen Sicherheitslücken bekommst.

              Ich würde das nicht empfehlen, sondern DRINGEND anraten. Das Problem sollte gelöst werden, bevor man sich weiter um die Zeichencodierung kümmert.

              Merke: Wann immer echo und $_GET/$_POST zusammenstehen, sollte htmlspecialchars() nicht weit sein.

              Qapla'

              --
              „Perfektion ist nicht dann erreicht, wenn es nichts mehr hinzuzufügen gibt, sondern wenn man nichts mehr weglassen kann.“ (Antoine de Saint-Exupéry)
              1. Tach!

                Merke: Wann immer echo und $_GET/$_POST zusammenstehen, sollte htmlspecialchars() nicht weit sein.

                Nein, das ist zu kurz gedacht. Das Problem beschränkt sich nicht nur auf die direkten Eingabewerte. Es betrifft stattdessen alle Ausgaben, egal aus welcher Quelle sie stammen und auf welchem Wege sie dorthin gelangt sind.

                dedlfix.

                1. Tach!

                  Merke: Wann immer echo und $_GET/$_POST zusammenstehen, sollte htmlspecialchars() nicht weit sein.
                  Nein, das ist zu kurz gedacht. Das Problem beschränkt sich nicht nur auf die direkten Eingabewerte. Es betrifft stattdessen alle Ausgaben, egal aus welcher Quelle sie stammen und auf welchem Wege sie dorthin gelangt sind.

                  Nachtrag: Auch hat die Herkunft der Werte keinerlei Einfluss auf die zu verwendenden Mittel bei der Ausgabekontextbeachtung. Die Auswahl des passenden Werkzeugs richtet sich ausschließlich nach dem jeweiligen Ausgabekontext.

                  htmlspecialchars() ist für die Ausgabe in Richtung HTML geeignet, nicht aber wenn das Szenario beispielsweise vorsieht, (Eingabe-)Werte in ein DBMS zu speichern.

                  dedlfix.