OneWorld: Überall ist UFT8 eingestellt - DB liefert trotzdem ISO-8859-1!

  • Ich habe in meiner MySQL Datenbank für alles utf8-general-ci eingestellt.
  • Meine PHP-Dateien sind auch alle UTF8 codiert (Zend/Eclipse > Edit > Set Encoding: Man sieht UFT8 ist eingestellt)
  • Im Header der HTML Datei steht auch UTF8:
  
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
<html>  
<head>  
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">  
<title>Insert title here</title>  
</head>  
<body>...  

  • Wenn ich in meinem PHP Skript z.B. echo "ö"; schreibe, wird das "ö" auch richtig angezeigt

  • WENN ICH ABER das DB-result mit $row = $query_result->fetch_array(MYSQLI_ASSOC); auslese, DANN sind die Sonderzeichen defekt! Und noch besser: Stelle ich im Browser Ansicht > Zeichencodierung auf "ISO-8859-1", dann werden die Sonderzeichen der DB-Abfrage wieder korrekt angezeigt.

Die Daten habe ich über phpMyAdmin in die DB geschrieben.

Wo steckt der Fehler? Was muss ich tun??

  1. Hallo,

    mach ganz am Anfang, also direkt nach der Datenbankverbindung eine Query "set names 'utf8'", dann sollte sich dein Problem in Wohlgefallen aufloesen.

    Gruss

    Dieter

    1. Hallo Dieter,

      mach ganz am Anfang, also direkt nach der Datenbankverbindung eine Query "set names 'utf8'", dann sollte sich dein Problem in Wohlgefallen aufloesen.

      besser ist die Verwendung von mysql_set_charset() bzw. bei Verwendung der leistungsfähigeren und empfohlenen mysqli-Erweiterung mysqli::set_charset().

      Beste Grüße

      Vinzenz

      1. Danke für eure Hilfe!

        Habe Dieters Tipp umgesetzt und nun geht alles super. Damit ist zwar das Problem nicht direkt an der Wurzel gepackt worden, aber doch noch ziemlich nahe der Wurzel behoben ;)

        1. Hi!

          Habe Dieters Tipp umgesetzt und nun geht alles super. Damit ist zwar das Problem nicht direkt an der Wurzel gepackt worden, aber doch noch ziemlich nahe der Wurzel behoben ;)

          Doch, das ist genau die Wurzel, die du vergessen hast. Du schriebst im Ausgangsposting:

          Ich habe in meiner MySQL Datenbank für alles utf8-general-ci eingestellt.

          Welche der insgesamt 10 verschiedenartigen Stellen hast du denn berücksichtigt?

          In der Regel übersieht man als Einsteiger in diese Problematik, dass einige der Werte nur Defaultwerte sind (Datenbank- versus Tabellen- versus Feldkodierung), und dass bei nicht expliziter Aushandlung der zwischen Client und Server zu verwendenden Kodierung (Verbindungskodierung) ein solcher Defaultwert zur Anwendung kommt, und dass obendrein MySQL zwischen Feldkodierung und Verbindungskodierung Umkodierungen vornimmt, wenn die nicht übereinstimmen.

          Lo!

  2. hi,

    Was muss ich tun??

    Erstmal feststellen, mit welcher Codierung Deine Texte(Zeichen) in der DB vorliegen.

    Hotti

    --
    Wenn der Kommentar nicht zum Code passt, kann auch der Code falsch sein.
    • Ich habe in meiner MySQL Datenbank für alles utf8-general-ci eingestellt.
    • Meine PHP-Dateien sind auch alle UTF8 codiert (Zend/Eclipse > Edit > Set Encoding: Man sieht UFT8 ist eingestellt)

    Mal ein heißer Tip, Apache liefert falsches Format oder wir hätten mal wieder ein klassische UTF8 problem von php

    schon mal

    echo utf8_encode(wert_aus_Datenbank);

    probiert?

    lg