Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Codierung wird nach Event-function gewechselt

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [Erledigt] Codierung wird nach Event-function gewechselt

    Hallo Experten,

    ich habe jetzt mal einen neuen Thread aufgemacht, da ich auf meine Frage immer Antworten mit utf-8 bekomme. Ich bin zwar kein PHP Experte, aber mein Problem liegt nicht bei utf-8 Codierung.

    Also die Situation
    -S1.php Seite ist als UTF-8 ohne BOM hinterlegt
    -Die Seite enhält eine Form mit einem Submit button "Speichern"
    -Es gibt einen Sicherheitsabfrage falls die Seite geschlossen wird.

    Hier der reduzierte Code der Seite:

    PHP-Code:
    <?php

    //Datenspeichern
    if ($_SERVER['REQUEST_METHOD'] == 'POST' and isset($_REQUEST['SaveData']))

      {
        echo 
    "gespeichert";
      }
    ?>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Language" content="de">
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Untitled Page</title>
    <style type="text/css">
    div#container
    {
       width: 970px;
       position: relative;
       margin-top: 0px;
       margin-left: auto;
       margin-right: auto;
       text-align: left;
    }
    body
    {
       text-align: center;
       margin: 0;
       background-color: #DCDCDC;
       background-image: url(images/_bkgrnd.png);
       color: #000000;
    }
    </style>
    <style type="text/css">
    a
    {
       color: #0000FF;
       text-decoration: underline;
    }
    a:visited
    {
       color: #800080;
    }
    a:active
    {
       color: #FF0000;
    }
    a:hover
    {
       color: #0000FF;
       text-decoration: underline;
    }
    </style>
    <style type="text/css">
    #wb_CCFFeedbackbogen
    {
       background-color: transparent;
       border: 0px #000000 solid;
    }
    #ButtonSaveData
    {
       border: 2px #C0C0C0 solid;
       background-color: transparent;
       background-image: url(images/ButtonStandard2.gif);
       background-repeat: repeat-x;
       background-position: center center;
       color: #C4000A;
       font-family: Arial;
       font-weight: bold;
       font-size: 13px;
    }
    </style>
    <!-- TableCCFFragen <HEAD> -->
    <style type="text/css">
    #TableCCFFragen
    {
       border: 0px #C0C0C0 none;
       background-color: transparent;
       border-spacing: 0px;
    }
    #TableCCFFragen td
    {
       padding: 0px 0px 0px 0px;
    }
    #TableCCFFragen td div
    {
       white-space: nowrap;
    }
    </style>


     
     <!-- Sicherheitsabfrage-->
     
    <script type="text/javascript">

            
    window.onbeforeunload = function() {
        if (document.getElementById("cbDataChange").value == 'true') {
            return "Sie verlieren ggf. Ihre letzten, nicht gespeicherten Eingaben!";
        } else {
            return;
        }
    }
    </script>


    </head>
    <body onLoad="if (location.hash != '#TableStartPos') location.hash = '#TableStartPos';">
    <div id="container">
    <!-- Bindung -->
    <div id="Html2" style="position:absolute;left:146px;top:224px;width:388px;height:69px;z-index:1">


    <div id="Bindungen_Text" style="position:absolute;left:0px;top:0px;width:382px;height:44px;z-index:24;text-align:left;">
    <div style="line-height:22px;"><span style="color:#C4000A;font-family:Arial;font-size:17px;">
       <strong>1 - <?php echo $_GET["P3"];  ?> 2 -  <?php echo htmlentities$_GET["P3"], ENT_QUOTES); ?></strong></span></div>
    </div>
    </div>
    <div id="wb_CCFFeedbackbogen" style="position:absolute;left:63px;top:297px;width:846px;height:391px;z-index:2;">
    <form name="CCFFeedbackbogen" method="post" action="" enctype="application/x-www-form-urlencoded" target="_self" id="CCFFeedbackbogen">
    <input type="submit" id="ButtonSaveData" onclick="f_checkbox('false');return true;return false;" name="SaveData" value="Speichern" style="position:absolute;left:27px;top:361px;width:812px;height:25px;z-index:0;">
    </form>
    <input type="hidden" id="cbDataChange" name="cbDataChange" value="false"></div>


    </div>
    </body>
    </html>
    Jetzt das Problem:

    Die Seite wird mit Parameter aufgerufen

    http://.../S1.php?P1=Fremdbild (M)&P2=Kollege&P3=Jörg&P4=5&P5=0&P6=Standard#Table StartPos

    der Parameter P3 wird im codebereich siehe "<!-- Bindung -->" (<strong>1 - <?php echo $_GET["P3"]; ?> 2 - <?php echo htmlentities( $_GET["P3"], ENT_QUOTES); ?></strong> ) zweimal ausgegeben. Beim ersten Aufruf der Seite ist die Ausgabe folgende:

    1-J�rg
    2-Jörg

    Achtung jetzt kommt es: Wenn ich jetzt auf den Submit-Button "Speichern" drücke, wird die Seite neu aufgebaut und die Ausgabe ist genau umgekehrt:

    1-Jörg
    2-J�rg

    Aber, der Witz an der Sache ist, wenn ich die den Codeteil der Sicherheitsabfrage siehe "<!-- Sicherheitsabfrage-->" entferne, ist das Problem verschwunden.

    Wie löse ich das bzw. was passiert beim auslösen von Speichern ?!?

    mfg eem Monarch

    Hier kann man die Seite sehen in reduzierter Form

    http://www.deutsche-training.de/CCFOnline/CCFFeedbacks.php?P3=Jörg#TableStartPos

  • #2
    http://.../CCFFeedbacks.php?P1=Fremdbild (M)&P2=Kollege&P3=JörgP4=5&P5=0&P6=Standard#Table StartPos
    Du hast Leerzeichen in der URI?

    Bitte example.com für beispielURLs verwenden.

    Hast du im Form das Accept Charset aus dem anderen Thread schon versucht?
    The string "()()" is not palindrom but the String "())(" is.

    Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
    PHP.de Wissenssammlung | Kein Support per PN

    Kommentar


    • #3
      Hallo Hausl,

      Leerzeichen im URL -> "JA" aber mit Aufruf "http://.../S1.php?P3=Jörg" bleibt das Problem. Und "Accept Charset" habe ich versucht, ändert aber auch nichts, da die Ausgabe von P3 außerhalb des Formobjekt stattfindet.

      Kommentar


      • #4
        Zitat von Monarch Beitrag anzeigen
        Beim ersten Aufruf der Seite ist die Ausgabe folgende:

        1-J�rg
        2-Jörg

        Achtung jetzt kommt es: Wenn ich jetzt auf den Submit-Button "Speichern" drücke, wird die Seite neu aufgebaut und die Ausgabe ist genau umgekehrt:

        1-Jörg
        2-J�rg

        Aber, der Witz an der Sache ist, wenn ich die den Codeteil der Sicherheitsabfrage siehe "<!-- Sicherheitsabfrage-->" entferne, ist das Problem verschwunden.

        Wie löse ich das bzw. was passiert beim auslösen von Speichern ?!?

        mfg eem Monarch

        Hier kann man die Seite sehen in reduzierter Form

        http://www.deutsche-training.de/CCFO...#TableStartPos
        VORSICHT: Du gibst uns falsche Infos!

        Du schreibst zwar das Du "�" bekommst, wenn ich aber deinen Bespiel-Link aufrufe, dann steht da "ö"

        Wie sieht denn jetzt tatsächlich Dein Fehlerbild aus

        Kommentar


        • #5
          Das kommt dadurch, dass ich Versuche fahre um das Problem zu lösen .... Aber es spielt keine Rolle was kommt, sondern warum es sich dreht!!!! bzw. warum der Fehler nur Auftritt wenn der Code der Sicherheitsabfrage vorhanden ist . siehe Fehlerbeschreibung oben

          Kommentar


          • #6
            das Problem hängt daran, dass du dich allein auf den Webserver und die Meta-Angabe verlässt...
            sende bitte eine header-Anweisung, die das Encoding vorschreibt - offenbar ist dein Webserver intern noch nicht durchgehend auf utf8 gestellt...
            "Irren ist männlich", sprach der Igel und stieg von der Drahtbürste [IMG]http://www.php.de/core/images/smilies/icon_lol.gif[/IMG]

            Kommentar


            • #7
              Zitat von Monarch Beitrag anzeigen
              Das kommt dadurch, dass ich Versuche fahre um das Problem zu lösen .... Aber es spielt keine Rolle was kommt, sondern warum es sich dreht!!!! bzw. warum der Fehler nur Auftritt wenn der Code der Sicherheitsabfrage vorhanden ist . siehe Fehlerbeschreibung oben
              das spielt leider doch eine wichtige Rolle:

              Variante A
              Wenn ein Dokument als Unicode ( UTF-8 ) abgespeichert wurde, jedoch als ISO 8859-1 interpretiert wird, geschieht folgendes:

              erwartete Ausgabe: ä ö ü
              wirkliche Ausgabe: ä ö ü

              D.h. im Editor (z.B. Notepad++) steht bei Kodierung zwar "UTF 8 ohne BOM", aber im Sourcecode s des Dokuments steht an mindestens einer Stelle ein anderes Format, wie z.B.

              • <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
              • <?php
              header('Content-Type: text/html; charset=ISO-8859-1');
              ?>
              • <form action='$link' method='post' accept-charset='ISO-8859-1'>

              Das ä wurde binär gesehen als 11000011 10100100 gespeichert. Die beiden Bytes gehören laut UTF-8 zusammen, werden in ISO 8859-1 allerdings auseinander genommen. Folglich wird aus 11000011 ein à und aus 10100100 ein ¤-Zeichen.

              Variante B
              Wenn die Umlaute als Fragezeichen dargestellt werden, dann wird ein als ISO 8859-1 kodiertes Dokument als UTF-8 interpretiert,
              d.h. im Editor (z.B. Notepad++) steht bei Kodierung nicht "UTF 8 ohne BOM"!

              erwartete Ausgabe: ä ö ü
              wirkliche Ausgabe: � � �

              Mit anderen Worten wurde hier ein ä als 11100100 gespeichert.
              In UTF-8 ist dieses Byte jedoch ungültig, wird also nicht angezeigt oder ignoriert, bzw. als ? oder � dargestellt.

              Kommentar


              • #8
                Zitat von eagle275 Beitrag anzeigen
                das Problem hängt daran, dass du dich allein auf den Webserver und die Meta-Angabe verlässt...
                sende bitte eine header-Anweisung, die das Encoding vorschreibt - offenbar ist dein Webserver intern noch nicht durchgehend auf utf8 gestellt...
                Das header() oben in seinem Code fehlt war mir auch schon aufgefallen, aber das hatte der TE im letzten Thread zu diesem Problem schon klargestellt das es mit und ohne gleich aussieht, sich nichts änderte. Darauf habe ich mich verlassen. Die nur zur Info - das ist nämlich nicht der erste Thread zu genau dem Ding hier.

                Zitat von Monarch Beitrag anzeigen
                ...

                Als erstes ganz oben auf der Seite steht

                PHP-Code:
                <?php
                 header
                ("Content-Type: text/html; charset=utf-8");
                ?>
                Es gibt auch die Metaangabe

                PHP-Code:
                <head>
                <
                meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
                ... 
                ...
                Zitat von hausl Beitrag anzeigen
                Wie ist die PHP Datei abgespeichert? ...
                The string "()()" is not palindrom but the String "())(" is.

                Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
                PHP.de Wissenssammlung | Kein Support per PN

                Kommentar


                • #9
                  in dem Fall würde ich vermuten, das nicht alle beteiligten Files das richtige Encoding haben - die Ausführünge von dl4all zeigen das
                  "Irren ist männlich", sprach der Igel und stieg von der Drahtbürste [IMG]http://www.php.de/core/images/smilies/icon_lol.gif[/IMG]

                  Kommentar


                  • #10
                    eagle275 hat den Fehler gefunden: Beim Provider angerufen Umzug und Problem gelöst

                    Hausl: das mit dem Header hatten wir gestern schon, brachte nix. Wie die Seite gespeichert ist steht oben in der Fehlerbeschreibung.

                    Danke eagle --- mfg eem monarch

                    Kommentar

                    Lädt...
                    X