Autor Zpráva
deader
Profil
Zdravím,
potřebuji získat název a popis fotky z exif informací IFD0.ImageDescription a IFD0.Comments, avšak narazil jsem na problém s kódováním. ImageDescription:
název LabuĹĄ ěščřžýáà ÈóúůďťĹ
se mi povedlo pomocí
iconv("utf-8", "windows-1250",$exif["IFD0"]["ImageDescription"])
úspěšně převést na
název Labuť ěščřžýáíéóúůďťň
avšak komentář
komentáYe ` X}ÝÁÍÉÓÚndG Labue a Y~ýáíéóúoeH
nikoliv, má vypadat takhle:
komentáře ĚŠČŘŽÝÁÍÉÓÚŮŤĎŇ Labuť ěščřžýáíéóúůďťň
Zkoušel jsem fci iconv a nejde utf-8 ani ISO-8859-2. Informace jsou zadávány ve Vlastnostech souboru ve Windows nebo ve Photoshopu.
Moc děkuji za pomoc.
Kronny
Profil
A zkoušel jsi už jiné kódování ?
Davex
Profil
deader:
Můžeš dát k dispozici nějaký obrázek s problematickými EXIF informacemi?
deader
Profil
Jsem někde četl, že jen tyto 3 podporují češtinu, nebo je to jinak? Obrázek: http://zsrep.pisarovic.cz/upload/4.JPG nebo http://zsrep.pisarovic.cz/upload/2.JPG;
výpis všech exif toho obrázku: http://zsrep.pisarovic.cz/admin/exif.php?n=1
Davex
Profil
deader:
Ona ta funkce exif_read_data() funguje pro češtinu divně, protože se sama snaží kódování převádět podle nastavení exif.encode_unicode, které je ve výchozím stavu nastaveno na pro češtinu nevhodné kódování ISO-8859-15. Zároveň tam pravděpodobně dochází k dvojitému převodu nebo nerozeznání kódování UCS-2LE.

Mělo by pomoci přenastavení exif.encode_unicode na UTF-8 a normalizace na kódování UTF-8.
/* pro EXIF používat kódování UTF-8 */
ini_set('exif.encode_unicode', 'UTF-8');

/* konverze neznámého řetězce z EXIFu na UTF-8 */
function exif2utf($s)
{
  /* převod UCS-2LE -> UTF-8 */
  $utf = mb_convert_encoding($s, 'UTF-8', 'UCS-2LE');

  /* bylo to UCS-2LE? */
  if (mb_strlen($utf) < mb_strlen($s)) {
    $s = $utf;
  }

  /* odstranění znaku \0 na konci */
  if (mb_substr($s, -1)=="\0") {
    $s = mb_substr($s, 0, -1);
  }
  
  return $s;
}

/* použití */
$out = iconv("utf-8", "windows-1250", exif2utf($exif["IFD0"]["ImageDescription"]));

Pro rozeznání multibyte kódování by měla sloužit funkce mb_detect_encoding(), ale kódování UCS-2LE mi označila jako UTF-8. Možná to jde lépe, ale nenapadá mě jiné řešení.
deader
Profil
Super, fakt moc díky , již jsem zoufal, že se nikdo neozve a nebudu moci včas dokončit zakázku. Krásně to funguje i na title a subject.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0