Umlaute werden falsch angezeigt

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • 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!
    Last edited by Alex87; 01-05-2010, 18:53.

  • #2
    Ist die Datenbankverbindung auf utf8 gestellt?

    Comment


    • #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)){......................
      ?>

      Comment


      • #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

        Comment


        • #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

          Comment


          • #6
            Originally posted by Alex87 View Post
            Wenn ich alle Spalten benutze, dann kann ich die ABfrage * doch nutzen, oder?
            Nein, ist nicht zu empfehlen.

            Originally posted by Alex87 View Post
            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.

            Comment


            • #7
              Originally posted by h3ll View Post
              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 ;-)

              Comment


              • #8
                Originally posted by Alex87 View Post
                Die einzigste
                Brrrrr! Das Wort "einzigste" gibt es nicht.

                Originally posted by Alex87 View Post
                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.

                Originally posted by Alex87 View Post
                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.
                Last edited by h3ll; 01-05-2010, 18:03.

                Comment


                • #9
                  Originally posted by h3ll View Post
                  Brrrrr! Das Wort "einzigste" gibt es nicht.
                  Ich bin Schwabe ;-)

                  Sache, geklärt, dank dir vielmals!

                  Comment

                  Working...
                  X