BigPeter: Das leidige Problem der Umlaute

Guten Morgen allerseits,

ich finde gerade nicht das Problem warum die Umlaute aus meiner Datenbank alle komplett als "?" statt Umlaut angezeigt werden :/

Mein Header beinhaltet :

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
wie auch
<meta http-equiv = "Content-Type" content = "text/html; charset=UTF-8" />

Meine Datenbank benutzt die Kollation "latin1_german2_ci".

Meine Datenbank abfragen sehen wie folgt aus :

# Informationen aus der DB holen  
  $dbconn = mysqli_connect($hostname, $username, $password, $database);  
  $sql = "SELECT name,DATE_FORMAT(date, '%d.%M %Y'),icontype FROM pictures_test WHERE id='". $_GET['t'] ."'";  
  $dbconn->set_charset("utf8");  
  $stmt = mysqli_prepare($dbconn, $sql);  
  mysqli_stmt_execute($stmt);  
  mysqli_stmt_bind_result($stmt, $name, $date, $micon);  
  mysqli_stmt_fetch($stmt);

Wo liegt mein Fehler oder eine mögliche Fehlerquelle ?

Liebe Grüße

BIG PETER!

  1. Mahlzeit BigPeter,

    Mein Header beinhaltet :

    In welcher Zeichencodierung sind die PHP-Dateien abgespeichert?

    $sql = "SELECT name,DATE_FORMAT(date, '%d.%M %Y'),icontype FROM pictures_test WHERE id='". $_GET['t'] ."'";

    Das betrifft zwar jetzt nicht Deine Umlautproblematik - aber Du hast nach möglichen Fehlerquellen gefragt: Du nutzt hier eine Benutzereingabe (bzw. allgemeiner: einen offensichtlich ungeprüften Parameter von außen) innerhalb Deiner SQL-Abfrage. Informiere Dich zu den Themen "SQL-Injection" und "Kontextwechsel".

    MfG,
    EKKi

    --
    sh:( fo:| ch:? rl:( br:& n4:~ ie:% mo:} va:) de:] zu:) fl:{ ss:) ls:& js:|
  2. Hi!

    ich finde gerade nicht das Problem warum die Umlaute aus meiner Datenbank alle komplett als "?" statt Umlaut angezeigt werden :/

    Sind sie bereits im DBMS defekt? Werden sie mit dem phpMyAdmin richtig angezeigt oder nicht?

    Meine Datenbank benutzt die Kollation "latin1_german2_ci".

    Das ist ein Defaultwert für neu anzulegende Tabellen, die diesen Wert als Default-Wert für neu anzulegende Felder verwenden. Wenn du mit Datenbank dein DBMS meinst, so ist die DBMS-Einstellung auch wieder nur der Default-Wert für neue Datenbanken. Letzlich interessiert jedoch nur die Kodierung der einzelnen Felder.

    $sql = "SELECT name,DATE_FORMAT(date, '%d.%M %Y'),icontype FROM pictures_test WHERE id='". $_GET['t'] ."'";

    Kontextwechsel beachten! Du arbeitest doch schon mit Prepared Statements, warum verwendest du dann keinen gebundenen Parameter bei der Query?

    $dbconn->set_charset("utf8");

    Wenn deine Felder als Latin1 gekennzeichnet sind und die Daten darin auch so kodiert sind (Kontrolle mit dem PMA) dann bewirkt diese Anweisung, dass die Daten umkodiert werden, bevor sie zurückgegeben werden. Fehlermöglichkeiten gibt es viele, am besten ist, das Prinzip zu verstehen und dann gleich richtig zu handeln: http://wiki.selfhtml.org/wiki/Themen:Zeichencodierung/MySQL.

    Lo!

  3. Om nah hoo pez nyeetz, BigPeter!

    http://forum.de.selfhtml.org/archiv/2011/9/t206924/#m1405619 ff.

    Matthias

    --
    1/z ist kein Blatt Papier.