Blog


File-Encoding erkennen

  • 08.02.2017
  • PHP
  • file
  • encoding
  • detection
  • UTF-8
  • ISO-8859-1
In PHP gibt es keine Standardmethode um das Encoding einer Datei zu erkennen. Mit folgender Funktion ist möglich die Kodierung einer Datei herauszufinden.
/**
* detect file encoding
*
* @param string $file file path
* @return string|null returns the encoding or null
*/
function detectFileEncoding($file)
{
$list = array('UTF-8', 'UTF-16LE', 'UTF-16BE', 'ISO-8859-1');
// read first bytes
$fp = fopen($file, 'r');
$str = fread($fp, 1024);
fclose($fp);
// check if input and output string are the same
foreach($list as $item)
{
$tmp = mb_convert_encoding($str, $item, $item);
if(md5($tmp) == md5($str))
{
return $item;
}
}
return null;
}
In der $list Variable sind die zu erkennen Zeichensätze zu definieren. Zum Erkennen des Zeichensatzes werden der ersten 1024 Bytes der Datei ausgelesen und diese in jeden Zeichensatz konvertiert. Wenn der Hashwert (md5-Summe) vor und nach dem Konvertieren ident ist, dann ist der aktuell getestete Zeichensatz auch der Zeichensatz der Datei.