Umlauteproblem bei Formulardaten -> MS SQL

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

  • #16
    Am Namespace kann es nicht liegen, das ist Unsinn. Behalte bitte deinen vorbildlichen XHTML Strict-Doctype.

    Wenn du mit einem kleinen Testscript die Zeichenkette "\xe2\x80\x94" in die DB schreibst, was steht dann in der DB drin?

    Was kommt auf dem Server an, wenn du in ein Formularfeld dieses Zeichen reinkopierst?: –
    Bitte mit
    PHP-Code:
    $input = ... // der ankommende String
    $output = array(); // Kontrollausgabe
    for ($i 0$i strlen($input); $i++) $output[] = ord($input[$i]);
    echo 
    explode(" "$output); 
    prüfen.

    Was kommt im Browser an, wenn dein Script die Zeichenkette von oben ("\xe2\x80\x94") ausgibt?

    Ist auf deinem Server die MBString-Erweiterung verfügbar?

    Anhand deiner 4 Antworten kann ich dir vermutlich helfen.

    Gruß,

    Amica
    [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
    Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
    Super, danke!
    [/COLOR]

    Kommentar


    • #17
      Hallo AMica,

      beim Formularfeld kommt

      Code:
      PHP Warning:  explode() expects parameter 2 to be string, array given in E:\xxx\testoutput.php on line 22
      Die anderen Schritte kann ich leider erst morgen testen, schonmal danke für die Hilfestellung.

      Kommentar


      • #18
        Sorry, ich meinte natürlich implode
        [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
        Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
        Super, danke!
        [/COLOR]

        Kommentar


        • #19
          Hallo Amica,
          leider kam ich erst heute dazu alles zu testen.

          Wenn ich in ein Formularfeld dieses Zeichen kopiere und mit deiner Script prüfe kommt folgendes im Browser an:
          Code:
          92 120 101 50 92 120 56 48 92 120 57 52
          Erstelle ich eine Person, und gebe bspw. im Feld "Geburtsname" die Zeichenkette ein, steht anschließend folgendes in der DB:
          Code:
          \xe2\x80\x94
          Wenn mein Script die Zeichenkette ausgibt, kommt ebenfalls \xe2\x80\x94 im Browser an.

          Laut PHP-Info ist MBString verfügbar (Multibyte Support: enabled; Multibyte string engine: libmbfl; HTTP input encoding translation: enabled)
          Ich hoffe damit kann man etwas anfangen.

          LG Hannes
          Zuletzt geändert von Hannes_L; 07.09.2010, 12:49.

          Kommentar


          • #20
            Die Zeichenkette mit den \x irgendwas musst du double-quoted (mit ", nicht mit ') angeben, damit es funktioniert.
            [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
            Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
            Super, danke!
            [/COLOR]

            Kommentar


            • #21
              So,

              Skriptausgabe: 34 92 120 101 50 92 120 56 48 92 120 57 52 34

              der Rest bleibt gleich, respektive steht nun in der DB "\xe2\x80\x94"

              Kommentar


              • #22
                Zitat von Hannes_L Beitrag anzeigen
                respektive steht nun in der DB "\xe2\x80\x94"
                Das kann eigentlich gar nicht sein. Zeigst du mal bitte den PHP-Code her, mit dem du diesen String in die DB schiebst?
                [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
                Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
                Super, danke!
                [/COLOR]

                Kommentar


                • #23
                  Der String wird über ein Formular übergeben (in meinem Beispiel habe ich es einfach im Feld "Geburtsname" eingetragen):

                  PHP-Code:
                  $gebname $_POST['fgebname'];
                  $query "INSERT INTO yx (..., gebname,...) VALUES (..., $gebname, ...)";
                  odbc_exec($conn$query); 

                  Kommentar


                  • #24
                    Das geht aber nicht über ein Formular, du musst es direkt als PHP-Code eintragen. Das betrifft auch die Kontrollausgabe: Dort meinte ich sowas wie
                    PHP-Code:
                    echo "\xe2\x80\x94"
                    [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
                    Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
                    Super, danke!
                    [/COLOR]

                    Kommentar


                    • #25
                      Achso :-) dann kanns ja nicht funktionieren.

                      Kann das ganze nun leider erst morgen weiter testen - Ergebnisse folgen.

                      Einen schönen Rest-Dienstag noch.

                      Kommentar


                      • #26
                        Hallo erneut,
                        hier mein nächster Anlauf:

                        PHP-Code:
                        echo "\xe2\x80\x94" 
                        Gibt aus: —

                        PHP-Code:
                        $input "\xe2\x80\x94" // der ankommende String
                        $output = array(); // Kontrollausgabe
                        for ($i 0$i strlen($input); $i++) $output[] = ord($input[$i]);
                        echo 
                        explode(" "$output); 
                        Gibt aus: 226 128 148

                        In der DB steht nach dem Eintragen: —

                        Hoffe dieses mal stimmt alles meinerseits

                        Kommentar


                        • #27
                          Hallo,

                          ich hab leider gerade keine Zeit. Entweder musst du dich noch bis vermutlich heute Abend gedulden oder mal schauen, ob jemand anderes hier dir ab jetzt weiterhelfen kann.

                          Gruß,

                          Amica
                          [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
                          Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
                          Super, danke!
                          [/COLOR]

                          Kommentar


                          • #28
                            Kein Problem - auf guten Rat warte ich gerne ein bisschen.

                            Kommentar


                            • #29
                              Zitat von Hannes_L Beitrag anzeigen
                              ... habe ich kurz einen einfachen Eingabe-/Ausgabetest gemacht ohne DB-Verbindung ...
                              - Auf dem Server (mittlerweile mit PHP 5.3.3) wird "Mller" ausgegeben
                              Damit ist die DB eigentlich aus dem Rennen.
                              PHP läuft auf ner Windows-Maschine mit IIS
                              Da wird der Fehler liegen - IIS wird das Encoding bei Ein- oder Ausgabe vermurksen. Wenn du es so weit eingrenzen kannst, also deinen Browser und dein Testscript als Fehlerquelle ausschließen, dann übergib den Fall dem Admin dieser Windows-Maschine.

                              Kommentar


                              • #30
                                Guten Morgen,

                                Zitat von Hannes_L Beitrag anzeigen
                                PHP-Code:
                                echo "\xe2\x80\x94" 
                                Gibt aus: —
                                Okay, das merken wir uns mal.

                                Zitat von Hannes_L Beitrag anzeigen
                                PHP-Code:
                                $input "\xe2\x80\x94" // der ankommende String
                                $output = array(); // Kontrollausgabe
                                for ($i 0$i strlen($input); $i++) $output[] = ord($input[$i]);
                                echo 
                                explode(" "$output); 
                                Gibt aus: 226 128 148
                                Das hilft uns weniger. Mit dem ankommenden String ist hier erstmal der aus dem Formular gefragt, wenn du diesen Gedankenstrich — in ein Formularfeld kopierst und abschickst.

                                Dein $input ist dagegen bereits ein wohldefinierter Teststring, den wir auf diese Weise auf etwas untersuchen würden, was wir längst wissen, bzw. sogar vorgegeben haben.

                                Was aber im Zusammenhang mit "\xe2\x80\x94" interessant ist, wäre das hier: Wenn wir diesen Teststring in die DB einfügen und dann eine Abfrage machen, die ihn wieder ausliest und dieses Ergebnis als $input durch dieses Kontrollausgabeschnipsel jagen, was dann da steht.

                                In etwa so, Code ist nur zum besseren Verständnis, aber vermutlich so nicht lauffähig:
                                PHP-Code:
                                $query "insert into blah (id, blubb) values (1234, '\xe2\x80\x94')";
                                $db->execute($query);
                                $query "select blubb from blah where id = 1234";
                                $row $db->query($query)->fetchRow();
                                $input $row["blubb"];
                                $output = array(); // Kontrollausgabe
                                for ($i 0$i strlen($input); $i++) $output[] = ord($input[$i]);
                                echo 
                                explode(" "$output); 
                                [/PHP]

                                Zitat von Hannes_L Beitrag anzeigen
                                In der DB steht nach dem Eintragen: —
                                Die Aussagekraft hängt aber ganz enorm davon ab, wo und wie du das gesehen hast.

                                Gruß,

                                Amica
                                [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
                                Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
                                Super, danke!
                                [/COLOR]

                                Kommentar

                                Lädt...
                                X