Umlaute werden falsch angezeigt

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

  • Umlaute werden falsch angezeigt

    Hallo Leute,

    ich hab oft das Problem, dass Umlaute aus der DB falsch angezeigt werden. Schaut euch die Tabelle unter Beschreibung an:

    Candy Mountain Incest Monkeys - Deutscher HoN-Clan | Jetzt als Member bewerben!

    Die Daten werden aus der DB gezogen. Woran kann das liegen?! Sie Seite ist mit UTF-8 als Charset formatiert, wie man im Quelltext sehen kann.

    So sieht die Tabelle innerhalb der DB aus:

    Code:
     
     
    SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
     
    --
    -- Datenbank: `d0gfh6d`
    --
     
    -- --------------------------------------------------------
     
    --
    -- Tabellenstruktur für Tabelle `hon_clans`
    --
     
    CREATE TABLE IF NOT EXISTS `hon_clans` (
      `id` int(255) NOT NULL auto_increment,
      `name` varchar(255) NOT NULL,
      `clankuerzel` varchar(255) NOT NULL,
      `gruendung` varchar(255) NOT NULL,
      `kontakt` varchar(255) NOT NULL,
      `webseite` varchar(255) NOT NULL,
      `clanlogo` int(255) NOT NULL default '0',
      `anzahlspieler` int(11) NOT NULL,
      `leader` varchar(255) NOT NULL,
      `beschreibung` text NOT NULL,
      `erfolge` text NOT NULL,
      PRIMARY KEY  (`id`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=6 ;
     
    --
    -- Daten für Tabelle `hon_clans`
    --
     
    INSERT INTO `hon_clans` (`id`, `name`, `clankuerzel`, `gruendung`, `kontakt`, `webseite`, `clanlogo`, `anzahlspieler`, `leader`, `beschreibung`, `erfolge`) VALUES
    (5, 'Candy Mountain Incest Monkeys', 'cky', '01.04.2010', 'fuckgjghjsinzor@yahoo.de', '', 1, 5, 'iNz0r', 'Vom Skill schätzen wir uns low-mid ein. xxxspaßig ;).', '');

    Muss ich bei den Tabellen-Einstellungen etwas ändern oder wo liegt das Problem?

    Danke für eure Hilfe!
    Zuletzt geändert von Alex87; 01.05.2010, 19:53.

  • #2
    Ist die Datenbankverbindung auf utf8 gestellt?

    Kommentar


    • #3
      Öh, du meinst innerhalb des PHP-Codes?
      Hab dazu keine konkreten Einstellungen - sieht folgendermaßen aus:

      Code:
       
      <?
      $mysqlhost="localhost"; // MySQL-Host angeben
      $mysqluser="xxxxxxx"; // MySQL-User angeben
      $mysqlpwd="xxxxxxx"; // Passwort angeben
      $mysqldb="xxxx"; // Gewuenschte Datenbank angeben
      
      $connection=mysql_connect($mysqlhost, $mysqluser, $mysqlpwd) or die("Verbindungsversuch fehlgeschlagen");
      
      mysql_select_db($mysqldb, $connection) or die("Konnte die Datenbank nicht wählen.");
      
      $sql = "SELECT * FROM hon_clans WHERE id=".$_GET['id'];
      
      $adressen_query = mysql_query($sql) or die("Anfrage nicht erfolgreich");
       
      $anzahl = mysql_num_rows($adressen_query);
      
      while ($adr = mysql_fetch_array($adressen_query)){......................
      ?>

      Kommentar


      • #4
        Dein Code ist anfällig für SQL-Injections, eine der meist ausgenützten Sicherheitslücken.

        Man sollte SELECT * vermeiden, sondern immer genau die Spalten selektieren, die man haben will.

        PHP: mysql_set_charset - Manual

        Kommentar


        • #5
          Ok, klasse, funktioniert, vielen Dank!

          Wenn ich alle Spalten benutze, dann kann ich die ABfrage * doch nutzen, oder?

          Gegen diese SQL-Injections habe ich is_numeric() eingebaut, das müsste ja ausreichen...

          Liebe Grüße

          Kommentar


          • #6
            Zitat von Alex87 Beitrag anzeigen
            Wenn ich alle Spalten benutze, dann kann ich die ABfrage * doch nutzen, oder?
            Nein, ist nicht zu empfehlen.

            Zitat von Alex87 Beitrag anzeigen
            Gegen diese SQL-Injections habe ich is_numeric() eingebaut, das müsste ja ausreichen...
            Theoretisch. Kommt auf den Fall an. In deinem geposteten Code gibts kein is_numeric.

            Außerdem muss du bedenken, dass is_numeric() nicht nur Dezimalzahlen, sondern jede Art von Zahlen erlaubt.

            Kommentar


            • #7
              Zitat von h3ll Beitrag anzeigen
              Außerdem muss du bedenken, dass is_numeric() nicht nur Dezimalzahlen, sondern jede Art von Zahlen erlaubt.
              Die einzigste von außen kommende Variable ist die ID, also volle Zahlen von 1-X. Da die ID nur zur Auswahl des Datensatzes dient und nichts ausgegeben wird, kann da eigentlich nichts passieren. Denk ich zumindest ;-)

              Kommentar


              • #8
                Zitat von Alex87 Beitrag anzeigen
                Die einzigste
                Brrrrr! Das Wort "einzigste" gibt es nicht.

                Zitat von Alex87 Beitrag anzeigen
                von außen kommende Variable ist die ID, also volle Zahlen von 1-X.
                Woher willst du das wissen? Werte in $_GET und $_POST kann der Benutzer beliebig verändern. Also ich würde mich nicht darauf verlassen, dass immer nur dezimale Ganzzahlen drin stehen.

                Zitat von Alex87 Beitrag anzeigen
                Da die ID nur zur Auswahl des Datensatzes dient und nichts ausgegeben wird, kann da eigentlich nichts passieren. Denk ich zumindest ;-)
                In dem Fall hier nicht. Aber es sollte dir klar sein, dass is_numeric() nicht immer das macht, was man denkt und dass ein sauberes Escaping (oder noch besser ein Prepared Statement) eigentlich immer empfehlenswert ist. Lieber einmal zu viel als einmal zu wenig.
                Zuletzt geändert von h3ll; 01.05.2010, 19:03.

                Kommentar


                • #9
                  Zitat von h3ll Beitrag anzeigen
                  Brrrrr! Das Wort "einzigste" gibt es nicht.
                  Ich bin Schwabe ;-)

                  Sache, geklärt, dank dir vielmals!

                  Kommentar

                  Lädt...
                  X