PaSt: EXIF und UTF8

hallo!

Ich hab ein Problem bei der Zeichencodierung von Exif-Daten. Sie werden alle als ISO-8859-15 ausgeliefert statt als UTF-8.
Die Seite ist in UTF-8(ohne BOM) gespeichert und wird laut Opera-Info auch als UTF-8 ausgeliefert jedenfalls werden die restlichen Umlauten korrekt angezeigt.
Stelle ich die Codierung in Opera auf ISO-8859-15 dann werden die EXIF-Daten korrekt angezeigt dafür die restlichen Umlaute falsch.

Codeauszug:

$exif = exif_read_data($pfad);
echo $exif['ImageDescription']

erzeugt dies;
"sch�nes st�ck"
Sollte aber "schönes stück" heissen.

Ok dann setzen wir folgenden Wert (mit Kontrollausgabe):
var_dump(ini_get('exif.encode_unicode'));
ini_set('exif.encode_unicode', "UTF-8");
var_dump(ini_get('exif.encode_unicode'));

erzeugt folgende Ausgabe:
string(11) "ISO-8859-15"
string(5) "UTF-8"

-> ok zuerst war ISO-8859-15 danach UTF-8 soweit so gut.

Auf ein weiteres
echo $exif['ImageDescription']

erzeugt dies;
"sch�nes st�ck"
Sollte aber "schönes stück" heissen.

Überprüfung in welcher Codierung die Daten Ankommen
var_dump(mb_detect_encoding($exif['ImageDescription']));

erzeugt folgende Ausgabe:
string(5) "UTF-8"

hmm eigentlich sollte doch alles stimmen. Wo liegt der Fehler?

grüsse.

  1. 'ǝɯɐu$ ıɥ

    hallo!

    Selber Hallo, hast du nicht verstanden was Dir Gunnar sagte? Bleib in Deinem alten Thread.
    ssnɹƃ
    ʍopɐɥs

    --
    I like children. If they're properly cooked.
    - W.C. Fields
    1. hi

      Grosses sorry war echt nicht absichtlich passiert! habe das Posting wohl ausversehen in der Kategier PERL gepostet (sollte aber PHP sein). Habe die Kategorie PERL ausgeblendet und mich gewundert weshalb mein Posting nicht erschienen ist (auch nach mehrmaligen neuladen der Forumshauptseite)!

      Tut mir echt Leid.

      grüsse

  2. Hi!

    $exif = exif_read_data($pfad);
    echo $exif['ImageDescription']
    erzeugt dies;
    "sch�nes st�ck"

    Was liefert bin2hex() oder url_encode() (leichter lesbar), wenn du die ImageDescription da durchschiebst?

    ini_set('exif.encode_unicode', "UTF-8");

    Und was ergibt sich nach dieser Änderung?

    Lo!

    1. hi

      Was liefert bin2hex() oder url_encode() (leichter lesbar), wenn du die ImageDescription da durchschiebst?

      bin2hex() => 736368f66e6573207374fc636b
      urlencode() => sch%F6nes+st%FCck

      ini_set('exif.encode_unicode', "UTF-8");

      Und was ergibt sich nach dieser Änderung?

      Siehe die var_dump Ausgaben(variable wird gesetzt) aber Exifausgabe bleibt in ISO 8859-15.

      Lo!

      grüsse

      1. Hi!

        Was liefert bin2hex() oder url_encode() (leichter lesbar), wenn du die ImageDescription da durchschiebst?
        urlencode() => sch%F6nes+st%FCck

        ini_set('exif.encode_unicode', "UTF-8");
        Und was ergibt sich nach dieser Änderung?
        Siehe die var_dump Ausgaben(variable wird gesetzt) aber Exifausgabe bleibt in ISO 8859-15.

        Nein, ich meinte ImageDescription, wenn du die nach dieser Änderung nochmal ausliest. Wenn das die gleiche Ausgabe wie oben liefert, dann bringt dir diese Option nichts, und dir wird vermutlich nichts bleiben, als zu Fuß umzukodieren.

        Lo!

        1. Hei!

          Wenn das die gleiche Ausgabe wie oben liefert, dann bringt dir diese Option nichts, und dir wird vermutlich nichts bleiben, als zu Fuß umzukodieren.

          Die Ausgabe bleibt gleich. Siehe var_dump().
          von Hand? also bsp mit utf8_encode()? Dann stimmt die Ausgabe. Aber was ist wenn ein file die Exif-Daten trotzdem in UTF-8 liefert? Dann geht wieder alles flöten und auf mb_detect_encoding() scheint auch kein verlass zu sein.

          Trotzdem danke für die Hilfe

          1. Hi!

            Wenn das die gleiche Ausgabe wie oben liefert, dann bringt dir diese Option nichts, und dir wird vermutlich nichts bleiben, als zu Fuß umzukodieren.
            von Hand? also bsp mit utf8_encode()? Dann stimmt die Ausgabe. Aber was ist wenn ein file die Exif-Daten trotzdem in UTF-8 liefert? Dann geht wieder alles flöten und auf mb_detect_encoding() scheint auch kein verlass zu sein.

            Die ImageDescription ist gemäß EXIF-Spezifiktion wohl immer ASCII, las ich gerade in ihr. Der UserComment ist variabel, aber es wird irgendwo angegeben, was vorliegt. Diese Information solltest du auszuwerten versuchen und alles müsste gut gehen, theoretisch. Abweichungen davon kann es natürlich geben, wenn irgendwer da Mist reinschreibt, aber das wäre im Prinzip nicht deine Aufgabe das zu korrigieren zu versuchen. Denn das ist nicht so einfach, besonders bei kurzen Texten. Ein Mensch kann interpolieren und das falsch kodierte Zeichen recht häufig richtig erraten, aber bring das mal einen Rechner bei. Aus lediglich einer Bytefolge lässt sich jedenfalls keine Kodierung erkennen. Einige Indizien können mit mehr oder weniger Wahrscheinlichkeit auf eine Kodierung hindeuten. Mehr ist aber nicht drin. mb_detect_encoding() schwindelt schon mit seinem Funktionsnamen, denn auch das kann nur mit Wasser kochen. try_to_detect oder guess wäre angemessener.

            Wenn in einem String Zeichen Bytewerte oberhalb von 0x7F vorkommen, und diese eine gültige UTF-8-Bytesequenz ergeben, kann man annehmen, dass es sich um UTF-8 handele. Wenn nicht, wird es ISO-8859-irgendwas sein oder vielleicht was Asiatisches, je nach Herkunft der Information.

            Lo!