nagradzam tutoriale
  • Gallery2 i polski EXIF

    dodano 24.09.2007 / komentarzy: 0 / autor: palmiak

    gallery2 logoW pracy dostałem za zadania przygotowanie galerii dla pewnej gazety. Galeria, jak galeria. Chcieli mieć możliwość dodawania zdjęć, rejestracji użytkowników etc etc oraz pobierania słów kluczowych z odpowiedniego pola EXIF. Wybór padł na skrypt Gallery2. I wszystko szło dobrze dopóki w polach EXIF nie było polskich znaków.

    Na początku sobie pomyśłałem, że może cały prooblem polega na programie w którym EXIFy były dodane. Jednak i Photoshop i InfranView zachowywały się w ten sam sposób (linuxowe alternatywy też nic nie pomogły). Czyli jak łatwo się teraz domyslić, winne było kodowanie znaków w EXIFie.

    Logiczne było więc, że trzeba odnaleźć w skrypcie moment w którym wyciągane są ze zdjęcia pola EXIF i przekodować na ISO (bo skrypt sam w sobie po pobraniu pół przekodowywuje ISO na UTF-8, nie pomyślano jednak, że można użyć formatu innego niż ISO, co akurat tutaj zaszło).

    Tym sposobem otwieramy katalog modules/exif/classes/ i zabieramy się za edycję pliku ExifHelper.class. Szukamy fragmentu:

            if (is_array($result)) {
                $result = implode(‘; ‘, $result);
            }
            $result = GalleryCoreApi::convertToUtf8($result, $sourceEncoding);
            return $result;
        }

    I dopisujemy linijkę, która nam przekonwertuje wszystko na ISO:

            if (is_array($result)) {
                $result = implode(‘; ‘, $result);
            }
                    $result = strtr($result,"\xA5\x8C\x8F\xB9\x9C\x9F","\xA1\xA6\xAC\xB1\xB6\xBC")# Win2iso
            $result = GalleryCoreApi::convertToUtf8($result, $sourceEncoding);
            return $result;
        }

    Dzięki temu nie powinniśmy mieć już więcej problemów z polskimi znakami w danych pobranych z pól EXIF.

    Napisz komentarz