UTF-8 MySQL Umlaute

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

  • UTF-8 MySQL Umlaute

    Ich habe mein Projekt auf UTF-8 umgestellt und alle Maßnahmen ergriffen, die das Internet vorschlägt. Alles klappt ganz gut, dass heißt Worte mit ü,ö,ä,ß werden aus der Datenbank gelesen und richtig angezeigt. Allerdings ändert sich das nach einem UPDATE der Daten aus einem Formular heraus. Dass heißt, Straße wird als Straße aus der Datenbank geladen und angezeigt und nach einem
    PHP-Code:
    mysql_query("UPDATE tblXYZ SET `Strasse` = '$data[Strasse]' WHERE id='$_SESSION[user_id]'") or die(mysql_error()); 
    steht inder Datenbank Tabelle Straà und angezeigt wird im Webbrowser danach StraÃ
    Könnte es damit zusammenhängen das mein Loginscript die Variablen vor dem Update über eine page_protect(); Funktion durch einen Filter jagt? Dort gibt es u.a. eine Funktion
    PHP-Code:
    function filter($data) {
        
    $data trim(htmlentities(strip_tags($data)));
        
        if (
    get_magic_quotes_gpc())
            
    $data stripslashes($data);
        
        
    $data mysql_real_escape_string($data);
        
        return 
    $data;

    Hab irgendwo als stupid Anfänger mal aufgeschnappt, dass htmlentities und UTF-8 nicht geht ????? Oder woran kann mein Problem liegen?

  • #2
    Was hat da das htmlentities() verloren? Das gehört nicht in die Datenbank.

    Kommentar


    • #3
      Als Anfänger benutzt man manchmal Scripte, die man nicht komplett versteht. Blöd, ich weiß. In meinem Formular werden alle POST Variablen so verpackt
      PHP-Code:
      foreach($_POST as $key => $value) {
          
      $data[$key] = filter($value); 
      und davor wird eine dbc.php include't' und die Funktion page_protect(); auf dieser Seite aufgerufen. Die arbeitet u.a. die bereits erwähnte
      PHP-Code:
      function filter($data
      ab. Hab folgendes entdeckt, aber weiß nicht, wie ich meine Filterfunktion damit verändern muss.
      string htmlspecialchars ( string $string [, int $flags = ENT_COMPAT | ENT_HTML401 [, string $charset [, bool $double_encode = true ]]] )

      Kommentar


      • #4
        Nochmal: Werte die in eine Datenbank gespeichert werden, dürfen nicht mit htmlentities() oder htmlspecialchars() behandelt werden. Du musst bei deiner Filter-Funktion htmlentities() komplett entfernen. Außerdem ist deine Funktion falsch benannt. Sie sollte eher getPostValueAndRemoveMagicQuotesAndSqlEscape() heißen. Jetzt wirst du sicher sagen, dass der Name viel zu lang ist. Darauf werde ich dir sagen, dass die Funktion zu viele Aufgaben erledigt. Eine Funktion sollte für _eine_ Aufgabe zuständig sein und der Name der Funktion sollte verständlich ausdrücken, was diese macht.
        Zuletzt geändert von h3ll; 15.12.2011, 14:50.

        Kommentar


        • #5
          , aber weiß nicht, wie ich meine Filterfunktion damit verändern muss.
          Ich würde die html*() da weg lassen und die Rohdaten speichern.
          Und die Sonderzeichenumwandlung erst vor der Ausgabe machen. Denn erst dann weiß ich, ob das ein HTML, PDF oder gar ein Bild wird.
          Wir werden alle sterben

          Kommentar


          • #6
            So klappt es jetzt. Danke an alle und alle Tips.

            Code:
            trim(htmlentities(strip_tags($data), ENT_QUOTES, 'UTF-8'))

            Kommentar


            • #7
              Das ist falsch.

              Kommentar


              • #8
                Was kann so passieren ???

                Kommentar


                • #9
                  Dass du Datenmüll in die Datenbank schreibst.

                  Kommentar


                  • #10
                    Nöö - passiert eigentlich momentan nicht. Ich werde es mal eine weile testen. Danke Dir

                    Kommentar


                    • #11
                      Zitat von anna28 Beitrag anzeigen
                      Nöö - passiert eigentlich momentan nicht. Ich werde es mal eine weile testen. Danke Dir
                      Warum wehrst du dich so den Fehler zu korrigieren? Ein erfahrener Programmierer erkennt ganz eindeutig den Fehler und du sagst quasi drauf "ich wart mal ab, bis was passiert, erst dann mach ich was". Wenn du immer so "ordentlich" programmierst, will ich nicht wissen, wie der Rest von deiner Applikation aussieht. Vermutlich gespickt mit haufenweise Sicherheitslücken und sonstige Grauslichkeiten. Aber solange nix passiert, ist ja alles gut %-)

                      Kommentar

                      Lädt...
                      X