Gernot: Wiedermal ein Umlaute-Problem

Hallo!

Ich weiß, dass das bestimmt eine häufig gestellte Frage ist, aber ich hab schon so viel nach Lösungsmethoden gesucht und leider keine gefunden.

Ich habe eine MySQL-Datenbank von der ich Texte auslese und mittels PHP ausgeben möchte. Problem: Umlaute!

Statt einem ü steht zum Beispiel ein A mit einer Tilde und ein 1/4 - Zeichen. Das umstellen des Zeichensatzes auf ISO8859-1 oder UTF-8 bringt nichts und auch der Befehl htmlentities() wandelt die Zeichen falsch um, so dass die Ausgabe im Browser immer A Tilde... usw ist.

Das einzige was hilft ist, wenn ich im Firefox manuell auf Kodierung UTF-8 schalte, aber dies hilft nur solange, bis ich die Page neu ansurfe.

Laut w3c ist die Page aber XHTML 1.0 strict und sieht zur Zeit so aus:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="content-type" content="text/plain; charset=ISO-8859-1"/>
<title>Testpage</title>
</head>
 <body>
  <?php
   include_once('DBProvider.php');
   $db = new DBProvider('localhost', 'user' 'root', '');
   $db->query("SELECT * FROM TextArt");
   while ($object = $db->fetchObject())
   {
    print(($object->Bezeichnung)) . '<br/>';
   }
  ?>
 </body>
</html>

Vielen Dank für eure Hilfe!

  1. Hallo Gernot!

    Ich weiß, dass das bestimmt eine häufig gestellte Frage ist

    Stimmt.

    Das einzige was hilft ist, wenn ich im Firefox manuell auf Kodierung UTF-8 schalte, aber dies hilft nur solange, bis ich die Page neu ansurfe.

    Ja, der Firefox stellt wieder auf die vorgegebene Kodierung um, sobald die Seite neu geladen wird.

    <meta http-equiv="content-type" content="text/plain; charset=ISO-8859-1"/>

    Ja wenn die Seite mit UTF-8 korrekt angezeigt wird, warum gibst du das denn hier nicht auch so an? Aber Achtung: diese Angabe wird von Browsern eigentlich nur interpretiert, wenn das Dokument lokal (ohne Server) aufgerufen wird. Aufgrund des PHP-Codes gehe ich einmal davon aus, dass das nicht der Fall ist.

    Die Lösung für dein Problem dürfte sein, serverseitig (z.B. per PHP oder in der Apache-Konfiguration) die entsprechenden Kodierung im Header anzugeben.

    Servus

    --
    flowh .
    Es ist nicht deine Schuld, dass die Welt ist, wie sie ist, es wär nur deine Schuld, wenn sie so bleibt.
       - Die Ärzte
    1. Hi!

      Erstmal danke für deine Antwort!
      Das Problem ist, dass er es völlig ignoriert, ob ich charset auf ISO oder UTF stelle. Sogar der W3C-Validator sagt, dass er diese Einstellung einfach ignoriert und auf ISO stellt...

      Naja wenn ich das serverseitig einstellen muss und die Homepage möglicherweise auf einem Webspace landet, wo ich das nicht darf, dann hab ich aber ein Problem :-)

      Hallo Gernot!

      Ich weiß, dass das bestimmt eine häufig gestellte Frage ist
      Stimmt.

      Das einzige was hilft ist, wenn ich im Firefox manuell auf Kodierung UTF-8 schalte, aber dies hilft nur solange, bis ich die Page neu ansurfe.
      Ja, der Firefox stellt wieder auf die vorgegebene Kodierung um, sobald die Seite neu geladen wird.

      <meta http-equiv="content-type" content="text/plain; charset=ISO-8859-1"/>
      Ja wenn die Seite mit UTF-8 korrekt angezeigt wird, warum gibst du das denn hier nicht auch so an? Aber Achtung: diese Angabe wird von Browsern eigentlich nur interpretiert, wenn das Dokument lokal (ohne Server) aufgerufen wird. Aufgrund des PHP-Codes gehe ich einmal davon aus, dass das nicht der Fall ist.

      Die Lösung für dein Problem dürfte sein, serverseitig (z.B. per PHP oder in der Apache-Konfiguration) die entsprechenden Kodierung im Header anzugeben.

      Servus

      1. Hallo zusammen!
        Mal so ins Blaue: schon mal folgenden Header versucht? :

          
        <?xml version="1.0" encoding="utf-8" ?>  
         <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//DE" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  
         <html xmlns="http://www.w3.org/1999/xhtml">  
         <head>  
        ...  
        
        

        Ansonsten kann ich euch für den Firefox noch die Erweiterung "Web Developer" empfehlen. U.A. zeigt diese sofort an, ob die Webseite richtig definiert wurde. (Oder ob in den Quirks-Modus zurückgesprungen wird....).
        Tobi

        1. Hi!

          Habs gefunden, man muss seit der MySQL Version 4.1 ein SET NAMES Latin1 ausführen

      2. Hallo Gernot!

        Das Problem ist, dass er es völlig ignoriert, ob ich charset auf ISO oder UTF stelle.

        Ja... sobald das Dokument im HTTP-Kontext aufgerufen wird, wird die meta Angabe "http-equiv" (=HTTP-Ersatz) ignoriert.

        Naja wenn ich das serverseitig einstellen muss und die Homepage möglicherweise auf einem Webspace landet, wo ich das nicht darf, dann hab ich aber ein Problem :-)

        Stimmt, aber Webspace mit PHP (das reicht ja) ist heutzutage eigentlich nicht wirklich teuer.

        BTW: Bitte keine TOFUs!

        Servus

        --
        flowh .
        Es ist nicht deine Schuld, dass die Welt ist, wie sie ist, es wär nur deine Schuld, wenn sie so bleibt.
           - Die Ärzte
      3. Hi Gernot!

        Mit welcher Kodierung speicherst du die Dokumente ab?

        MfG H☼psel

        --
        "It's amazing I won. I was running against peace, prosperity, and incumbency."
        George W. Bush speaking to Swedish Prime Minister unaware a live television camera was still rolling, June 14, 2001
        Selfcode: ie:% fl:( br:> va:) ls:& fo:) rl:? n4:& ss:| de:] js:| ch:? sh:( mo:) zu:)
      4. Moin!

        Naja wenn ich das serverseitig einstellen muss und die Homepage möglicherweise auf einem Webspace landet, wo ich das nicht darf, dann hab ich aber ein Problem :-)

        Du mußt ja zwingend PHP benutzen auf irgendeinem Webspace. Mit PHP kannst du problemlos beliebige HTTP-Header senden (header()-Funktion) - also kannst du auch den von PHP erzeugten Charset senden. Vollkommen ohne Servereinstellungen.

        - Sven Rautenberg

        --
        "Love your nation - respect the others."
  2. echo $begrüßung;

    Ich habe eine MySQL-Datenbank von der ich Texte auslese und mittels PHP ausgeben möchte. Problem: Umlaute!

    Welche Version hat der MySQL-Server? Wenn größer oder gleich 4.1: Was ergibt die Abfrage SHOW VARIABLES LIKE 'character_set%'?

    Welche Zeichenkodierung möchtest du verwenden, ISO8859-1 oder UTF-8?

    Statt einem ü steht zum Beispiel ein A mit einer Tilde und ein 1/4 - Zeichen.

    So sieht es aus, wenn man UTF-8-kodierte Daten als ISO-8859-1 interpretiert.

    [...] der Befehl htmlentities() wandelt die Zeichen falsch um [...]

    htmlentities() erwartet Strings, die nach ISO-8859-1 kodiert sind.

    Das einzige was hilft ist, wenn ich im Firefox manuell auf Kodierung UTF-8 schalte, aber dies hilft nur solange, bis ich die Page neu ansurfe.
    <meta http-equiv="content-type" content="text/plain; charset=ISO-8859-1"/>

    Diese Meta-Angabe ist nur ein Ersatz für den Fall, dass der Server keine Angaben zu Inhalt (wieso eigentlich text/plain?) und Kodierung macht. (Die livehttpheaders-Extension für den Firefox zeigt beispielsweise an, was der Server sendet.)
    Die charset-Angabe im HTTP-Header oder im Meta-Element gibt dem Empfänger an, in welcher Kodierung das Dokument vorliegt, damit er die ankommende Bytefolge richtig interpretieren kann. Wenn diese Angabe nicht mit der tatsächlichen Kodierung übereinstimmt, kann es zu Datenmüll kommen. (Und noch mehr Murks kommt raus, wenn die restliche Seite in Kodierung X gehalten ist, aber externe Daten in Kodierung Y einbindet.)

    echo "$verabschiedung $name";

    1. hi,

      htmlentities() erwartet Strings, die nach ISO-8859-1 kodiert sind.

      Per Default - aber über den dritten Parameter kann man auch in anderen Zeichentabellen ersetzen lassen.

      gruß,
      wahsaga

      --
      /voodoo.css:
      #GeorgeWBush { position:absolute; bottom:-6ft; }