Berlin: Umlaute richtig auslesen/ausgeben

Hallo Leute,

in meiner MySQL-Datnebank speichere ich einen "longtext"-Text in einem Datenfeld mit dem Typen "utf8_general_ci". In diesem Text sind Umlaute enthalten.

Jetzt möchte ich diese Inhalte auf meiner Page ausgeben. Dazu verwende ich:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> innerhalb des <head>.

Der Datenbank-Inhalt wird dennoch mit dem Fragezeichen im Salino drgestellt.

Was mache ich falsch?

thx

  1. Hi,

    Was mache ich falsch?

    Die Angabe der Zeichenkodierung im HTTP-Header sowie ihre Aushandlung bei der Herstellung der Verbindung zur Datenbank sind die am häufigsten übersehenen relevanten Stellen.

    Zu diesem Thema sind bereits zahlreiche Diskussionen geführt worden - also bitte erst mal suchen.

    MfG ChrisB

    --
    RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
    1. Das verstehe ich jetzt aber nicht.
      Bei einer anderen Page klappt es problemlos mit...
      <meta http-equiv="Content-Type" content="text/html; charset=utf-8">

      Bei meiner aktuellen GEschichte muss klappt es nur mit...
      <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">

      Bei beiden Fällen ist der Datenbank-Zellen-Typ: "utf8_unicode_ci"

      Warum ist das so?

      1. Hi,

        Bei einer anderen Page klappt es problemlos mit...
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8">

        Bei meiner aktuellen GEschichte muss klappt es nur mit...
        <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">

        Dann liegen deine Daten zu dem Zeitpunkt, wo du sie als HTML ausgibst, wohl auch in dieser Kodierung vor.

        Bei beiden Fällen ist der Datenbank-Zellen-Typ: "utf8_unicode_ci"

        Eher uninteressant.
        Stichworte, wonach zuerst zu schauen ist, nannte ich dir bereits.

        Warum ist das so?

        Weil du nicht überall, wo es erforderlich wäre, die verwendete Zeichenkodierung angegeben hast.

        MfG ChrisB

        --
        RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
        1. Meine Güte, mann kann es mit diesen Erziehungsversuchen auch übertreiben. Das ist doch echt lächerlich. Ich bin auch absolut kein Freund davon, wenn Leute Fragen stellen anstatt zu suchen - das verschwendet in der Tat nur Zeit. Aber hier ist doch offensichtlich, das er sich Gedanken gemacht hat. Also nenn ihm doch wenigstens ein paar brauchbare Stichworte anstatt neunmalkluge, überhebliche Anmerkungen wie "Weil du nicht überall, wo es erforderlich wäre, die verwendete Zeichenkodierung angegeben hast" zu verbreiten und mit einem patzigen "das hab ich doch schon gesagt", auf einen wenig hilfreichen Halbsatz in deinem Vorposting zu verweisen. Dann sag ihm doch einfach nochmal deutlich, dass man auch für die Verbindung selber ne Zeichenkodierung angeben kann/muss. Das was du hier antwortest ist nämlich mal mindestens genausoviel Zeitverschwendung...

          Berlin, die Codierung für die Datenbankfelder gibt nur an, wie die Daten in mySQL selber gespeichert werden, aber nicht wie sie von MySQL zu deiner Anweisung übertragen werden. Dafür gibt es nochmal eine eigene Codierungs-Einstellung für die Verbindung selber. Dazu musst du nach dem Aufbau der Verbindung noch eine Servervariable umstellen. Habs leide rnicht im Kopf wie genau - schau mal nach "mySQL SET Connection encoding" oder sowas

  2. Hallo,

    ich hatte auch Probs mit den Umlauten und der DB, sowie Ausgabe unter PHP. Hier mal wie ich es gelöst habe, allerdings ohne Gewähr auf richtige Schreibweise und Funktionserklärung. Bin nicht so sehr Insider. :-)

    1. Bei Verbindung zur DB SET CHARSET "UTF8" verwenden (schreibt Umlaute richtig in DB)

    2. HTML: <META...."ISO-8859-1">

    3. Ausgabe PHP: echo iconv("UTF-8","ISO-8859-1",$datenbanktext) (Anm.:utf und iso evtl. umgekehrt)

    Setze ich bei html direkt <meta..."utf-8"> gehts nicht mehr. Erklären kann ich es nicht, aber vielleicht hilfts Dir als Lösungsansatz.

    Gruss
    Thorsten

    1. @@treziman:

      nuqneH

      1. Bei Verbindung zur DB SET CHARSET "UTF8" verwenden (schreibt Umlaute richtig in DB)
      2. HTML: <META...."ISO-8859-1">

      Nein! Es ist unsinnig, an irgendeiner Stelle eine andere Zeichencodierung als UTF-8 zu verwenden.

      Qapla'

      --
      Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
      (Mark Twain)
      1. @@gunnar:

        Nein! Es ist unsinnig, an irgendeiner Stelle eine andere Zeichencodierung als UTF-8 zu verwenden.

        Du hast wahrscheinlich Recht, aber ich habe anfangs rumprobiert, um eine Einstellung zu finden, die sämtliche Texte, unter html z.B. <p>üben...</p> und Text aus DB z.B. echo $dbtext,richtig anzeigt, sowie auch richtig in die DB schreibt.
        Ich lerne aber selber noch und lasse mich gerne korrigieren!

        Gruss
        Thorsten

    2. Hi!

      1. Bei Verbindung zur DB SET CHARSET "UTF8" verwenden (schreibt Umlaute richtig in DB)

      Nein, SET CHARACTER SET will man nicht nehmen, weil das Probleme bereitet, wenn der Defaultwert für die Datenbank ungleich der verwendeten Kodierung ist. Besser ist SET NAMES und noch besser die dafür vorgesehenen Funktionen mysql(i)_set_charset().

      Setze ich bei html direkt <meta..."utf-8"> gehts nicht mehr. Erklären kann ich es nicht, aber vielleicht hilfts Dir als Lösungsansatz.

      Dann hast du irgendwo einen Fehler gemacht und nicht konsequent UTF-8 verwendet. Da dieses Thema immer wieder nachgefragt wird und recht komplex ist, findet sich im SELFHTML-Wiki ein Themenschwerpunkt zur Zeichenkodierung.

      Lo!

      1. »»... noch besser die dafür vorgesehenen Funktionen mysql(i)_set_charset().

        Stimmt, hab ich auch genommen. Bin aber gerade nicht am heimischen PC und hab nicht alles im Kopf. Darum auch "ohne Gewähr".

        Dann hast du irgendwo einen Fehler gemacht und nicht konsequent UTF-8 verwendet. Da dieses Thema immer wieder nachgefragt wird und recht komplex ist, findet sich im SELFHTML-Wiki ein Themenschwerpunkt zur Zeichenkodierung.

        Ich weiss aber noch, dass ich anfangs <META..."UTF-8"> gesetzt habe und danach mit sämtlichen Ausgabemöglichkeiten bezgl. Umlauten rumprobierte, und es nicht klappte. Das ich fehlerfrei arbeite, behaupte ich nicht. Dafür bin ich Anfänger und möchte sogar korrigiert werden!

        Vielleicht hilft dieser Thread aber schon, in der richtigen Richtung nach Lösungen zu suchen.

        Gruss
        Thorsten

        1. @@treziman:

          nuqneH

          Ich weiss aber noch, dass ich anfangs <META..."UTF-8"> gesetzt habe und danach mit sämtlichen Ausgabemöglichkeiten bezgl. Umlauten rumprobierte, und es nicht klappte.

          Da kannst du setzen, was du willst.* Wenn der Server im HTTP-Header etwas anderes angibt, hat dies Vorrang. [qa-changing-encoding, qa-choosing-encodings (vorläufige Übersetzung)]

          Qapla'

          --
          Gut sein ist edel. Andere lehren, gut zu sein, ist noch edler. Und einfacher.
          (Mark Twain)