Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] EXIF-Daten und Zeichenkodierung

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • [Erledigt] EXIF-Daten und Zeichenkodierung

    Hallo Forum,

    seit der Umstellung von PHP 5.2 auf 5.4 (bin spät dran 5.5 geht noch nicht wegen DB-Verbindung mysqli_ ...) werden die Zeichen der Exif-Daten eines Bildes nicht mehr korrekt dargestellt. Als Ausgabe erhalte ich nur ???????.

    meta charset = UTF-8
    Gesendeter HTTP-Header der Website ist UTF-8
    mbstring.http_input = UTF-8
    mbstring.http_output = UTF-8
    mbstring.internal_encoding = UTF-8

    Eigentlich alles auf UTF-8 gestellt was ging. Lief ja vorher mit diesen Konfigs.

    Der Unterschied liegt meiner Meinung nach bei den neuen Exif-Konfigurationsoptionen in der php.ini. Als es diese bei 5.2 noch nicht gab, gab es keine Probleme. Also habe ich exif.encode_unicode = UTF-8 eingestellt und bekomme dann nur 吀攀挀�*�渀椀欀 als Ausgabe.

    Habe den Exif-String auch geprüft. mb_detect_encoding( $exif['WINXP']['Title'] ) liefert ASCII und nach setzen von exif.encode_unicode liefert es UTF-8. Trotzdem bekomme ich ??? oder chin. Zeichen.

    Das Bild habe ich mit ASCII- und AUTO-Mode per FTP upgeloaded und auch per Browser - keine Unterschiede im Ergebnis.

    Hoste bei 1und1.

    Hat jemand vielleicht eine Idee, woran es liegen könnte?

    Vielen Dank
    Sven


  • #2
    Wenn $exif['WINXP']['Title'] auf Window hindeutet und da soll UTF-8 kommen, bekomme ich Zweifel.

    Gib dies mal mit dieser Hilfsfunktion
    PHP-Code:
    function dumpHex($s){
        echo 
    $s != '' '\x'.implode('\x',str_split(bin2hex($s),2)) : '';

    ein titel mit Umlauten aus und poste dies hier.
    Damit werden wir sehen wie der Titel kodiert ist.
    Was mit mb_detect_encoding rauskommt so wie du es aufrufst ist für die Mülltonne.
    PHP-Klassen auf github

    Kommentar


    • #3
      Er gibt \x3f\x3f\x3f ... aus. Also die ? als Hexwert.

      Wenn ich http://php.net/manual/de/exif.configuration.php richtig deute, dann konvertiert er den Zeichensatz automatisch. Und hier passiert irgendwo der Fehler. Statt UTF-8 kommt irgendwas anderes an.

      Kommentar


      • #4
        Zur Verdeutlichung des Problems ...

        Ich bin mir recht sicher, der Fehler bzw. das Problem liegt an der neuen PHP-Version. Wo genau, kann ich leider nicht sagen, dazu brauche ich die klugen Köpfe aus dem Forum.

        BEISPIEL !!!

        Dies ist der Quellcode der PHP-Datei ...

        PHP-Code:
        <?php

        $exif 
        exif_read_data"hamburg-berliner-tor-01.jpg"'WINXP'truefalse);

        echo 
        $exif['WINXP']['Title'];

        phpinfo();

        ?>
        Bei Version 5.2 erfolgt eine korrekte Ausgabe "Berliner Tor, Hamburg". Hier die php.ini -> http://s206959105.online.de/phpinfo_v5.2.pdf ...

        Bei Version 5.5 werden nur Fragezeichen ausgegeben. Hier die php.ini -> http://s206959105.online.de/phpinfo_v5.5.pdf ...


        Jemand eine Idee ??? Bin leider ratlos ...

        Kommentar


        • #5
          Vielleicht hilft dir das:
          If you have exif.so or php_exif.dll enabled under php.ini dynamic extensions, but you still have problem running any funtion, it is possible that you may need to change order of extensions in php.ini.

          In many PHP installation packages the extensions are listed alphabetically. However, exif is dependent on mbstrings to be loaded first. Yet, with alphabetic ordering the exif is listed before mbstrings and it causes the error. Load mbstrings extensions before exif.

          Thus, do put exif as the very last extension to load and you should be fine.

          Kommentar


          • #6
            Kannst du eines der Bilder hochladen, damit man ein wenig testen kann?

            Notiz: Chinesische Zeichen lassen mich immer an UTF-16 (und möglicherweise auch falsche Byte-Reihenfolge (endianness)) denken.

            Kommentar


            • #7
              @Phpyton

              Guter Einfall! Es klingt sehr logisch. Werde es mal testen, hoffentlich geht es bei 1und1


              @mermshaus

              Wie ich hier hochlade, weiß ich nicht. Aber hier ist der Link direkt auf das Bild. Unverändert natürlich: http://s206959105.online.de/hamburg-berliner-tor-01.jpg ...
              Little oder Big Endian sollte eigentlich von der Exif-Erweiterung automatisch konvertiert werden, wie bei motorola_jis etc. Sind die Standardeinstellungen in der ini. Klingt wirklich nach Reihenfolge. Würde mir sehr helfen, solltest du mal ein wenig testen. Bitte prüfe auch mal die Reihenfolge bei dir. DANKE!

              Kommentar


              • #8
                ich krigt alles sauber.
                Zitat von exiftool
                Code:
                File Name                       : hamburg-berliner-tor-01.jpg
                Directory                       : .
                File Size                       : 348 kB
                File Modification Date/Time     : 2015:02:05 16:27:26+01:00
                File Permissions                : rw-r--r--
                File Type                       : JPEG
                MIME Type                       : image/jpeg
                JFIF Version                    : 1.01
                Comment                         : TEST
                Exif Byte Order                 : Big-endian (Motorola, MM)
                Image Description               : Berliner Tor, Hamburg
                Orientation                     : Horizontal (normal)
                X Resolution                    : 72
                Y Resolution                    : 72
                Resolution Unit                 : inches
                Software                        : R4DB005     prgCXC1250316_GENERIC_H 4.5
                Modify Date                     : 2009:02:26 10:58:41
                Artist                          : AfiM, Hamburg
                Y Cb Cr Positioning             : Co-sited
                Exposure Time                   : 1/320
                F Number                        : 2.8
                Components Configuration        : Y, Cb, Cr, -
                Exposure Compensation           : 0
                Flashpix Version                : 0100
                Color Space                     : sRGB
                Exif Image Width                : 1632
                Exif Image Height               : 1224
                Interoperability Version        : 0100
                Custom Rendered                 : Normal
                Exposure Mode                   : Auto
                Digital Zoom Ratio              : 0
                Scene Capture Type              : Standard
                Subject Distance Range          : Distant
                XP Title                        : Berliner Tor, Hamburg
                XP Comment                      : Überblick über das Viertel "Berliner Tor" aus dem 12. Stock.
                XP Author                       : AfiM, Hamburg
                XP Subject                      : Bildergalerie Stadt Hamburg
                Padding                         : (Binary data 1732 bytes, use -b option to extract)
                Compression                     : JPEG (old-style)
                Thumbnail Offset                : 5021
                Thumbnail Length                : 4175
                About                           : uuid:faf5bdd5-ba3d-11da-ad31-d33d75182f1b
                Creator                         : AfiM, Hamburg
                Subject                         : Hamburg, Stadt
                Title                           : Berliner Tor, Hamburg
                Description                     : Berliner Tor, Hamburg
                Rating                          : 1
                Rating Percent                  : 1
                Last Keyword XMP                : Hamburg, Stadt
                Image Width                     : 800
                Image Height                    : 600
                Encoding Process                : Baseline DCT, Huffman coding
                Bits Per Sample                 : 8
                Color Components                : 3
                Y Cb Cr Sub Sampling            : YCbCr4:2:0 (2 2)
                Aperture                        : 2.8
                Image Size                      : 800x600
                Shutter Speed                   : 1/320
                Thumbnail Image                 : (Binary data 4175 bytes, use -b option to extract)

                Kommentar


                • #9
                  Dass der Code aus #4 nur ??????????? liefert kann ich auch für eine phpversion: 5.4.11 bestätigen.
                  Hab mal ein wenig mit dem Bild experimentiert:
                  PHP-Code:
                  ini_set('exif.decode_unicode_motorola','UCS-2LE');  //Orginal in ini UCS-2BE
                  ini_set('exif.encode_unicode','UTF-8');  //Orginal war ISO..
                  $exif exif_read_data"hamburg-berliner-tor-01.jpg"'WINXP'true);  

                  echo 
                  'phpversion: ',phpversion(),'<br>';

                  echo 
                  $exif['WINXP']['Title'],'<br>';
                  echo 
                  $exif['WINXP']['Comments'],'<br>';
                  echo 
                  $exif['WINXP']['Author'],'<br>';
                  echo 
                  $exif['WINXP']['Subject'],'<br>'
                  Ausgabe:
                  Code:
                  phpversion: 5.5.21
                  Berliner Tor, Hamburg
                  Überblick über das Viertel "Berliner Tor" aus dem 12. Stock.
                  AfiM, Hamburg
                  Bildergalerie Stadt Hamburg
                  Das da oben kann aber nicht die Lösung sein. Hoffe aber hilft etwas, eine saubere Lösung zu finden.
                  Ich bin mit meinen Kenntnissen da am Ende was exif betrifft.

                  LG jspit
                  PHP-Klassen auf github

                  Kommentar


                  • #10
                    Little oder Big Endian sollte eigentlich von der Exif-Erweiterung automatisch konvertiert werden, wie bei motorola_jis etc.
                    Sollte eigentlich ... dann lag der Fehler aber doch dort.


                    @jspit
                    Besten Dank! Funktioniert wieder. Zwar sind ein paar andere Felder dann unsauber, aber egal. Die WINXP Felder sind zumindest korrekt in UTF-8 kodiert.

                    Auch Dank an die anderen Helfer!

                    @Phpyton
                    Die Reihenfolge habe ich überprüft. Habe Version 5.5 bei mir installiert und die ini-Datei angesehen. 1und1 hat da auch nichts machen können, was aber irgendwie klar war. Daran lag es dann doch nicht, auch wenn der Ansatz gut war.


                    Zwar ist bisher noch immer die Ursache nicht geklärt, soll mir aber egal sein. Vielleicht löst sich das Problem automatisch bei einer Version > 5.6 !?

                    Wenn es ok ist, lasse ich diesen Beitrag noch ein wenig offen. Vielleicht kommt ja noch was ...

                    Nochmals, danke!

                    Kommentar


                    • #11
                      Zitat von UncleSven Beitrag anzeigen
                      Vielleicht löst sich das Problem automatisch bei einer Version > 5.6 !?
                      Glaube ich kaum. Dazu noch einige Details:
                      - Die Fragezeichen kommen ja beim Bild hamburg-berliner-tor-01 nur für die
                      Sektion WINXP, die z.B. unter Window beim Editieren der Dateieigenschaften
                      zugefügt wird. Mit allen anderen Sektionen gibt es bei mir keine Probleme.

                      - Alle eigenen Bilder, welche zu Vergleichszwecken herangezogen wurden,
                      werden über alle verfügbaren PHP-Versionen (5.4.x, 5.5.x) auch ohne ini-Eintrag für exif.decode_unicode_motorola korrekt dargestellt.

                      - Beim Testbild auffällig ist der Eintrag 'ByteOrderMotorola' => 1 in der Sektion
                      COMPUTED. Dieser Eintrag ist bei meinen Bildern immer 0.

                      Womöglich liegt das Problem gar nicht bei PHP, sondern ursächlich im Window bzw. der Software, welch die Einträge bearbeitet.

                      LG jspit
                      PHP-Klassen auf github

                      Kommentar

                      Lädt...
                      X