Charset einer Datei ermitteln

Napofis

require 'brain.php';
Hi @ all,

ich steh gerade vor den Problem den Zeichensatz einer Datei zu ermitteln die durch einen Upload erzeugt wurde.
Ich könnte es auch über eine Benutzereingabe ermöglichen, aber ich hätte es gern automatisch, damit ist es auch nicht so fehleranfällig.
Nur leider finde ich keine Funktion dafür.

Bei den Dateien handelt es sich um txt, cvs und xml.
Wie kann ich herausfinden in welchen Charset die Daten gespeichert sind.
Denn ich muss deren Inhalt in eine Datenbank speichern.

Kann mir da jemand helfen?


Gruß Napofis
 
Hallo!

.....aber finfo_file() und die vordefinierte Konstante FILEINFO_MIME_ENCODING hört sich zumindest passend an.
finfo_file() ist mit Vorsicht zu geniessen.
Mit FILEINFO_MIME gibt es mir sowohl für eine ASCII-Datei als auch für eine GIF-Datei als Mime-Type application/x-dpkg aus.
Also bekomme ich völlig falsche Informationen.
Abgesehen davon, wird (bei der ASCII-Datei) nur der Mime-Type ausgegeben obwohl laut PHP-Manual auch der Charset ausgegeben werden sollte.

FILEINFO_MIME_ENCODING hingegen funktioniert erst garnicht:
Code:
Notice: Use of undefined constant FILEINFO_MIME_ENCODING - assumed  'FILEINFO_MIME_ENCODING' in C:\xampplite\htdocs\charset.php on line  16

Warning: finfo_open() expects parameter 1 to be long,  string given in C:\xampplite\htdocs\charset.php on line 16
Und wenn man bedenkt dass PHP 5.2.9 erst von ende Februar diesen Jahres ist, bezweifel ich dass eine neuere Version etwas daran ändern würde.
Zumindest aber würde ich davon ausgehen dass man sich auf die zurückgegebenen Informationen nicht verlassen kann.

Gruss Dr Dau
 
THX, nun ja Xampp ist ja sone Sache, ich werde es auf jeden Fall mal testen.
Vielleicht läuft es ja auf einem Unix System richtig.

Ich hätte auch die Möglichkeit die Strings in der Datei zu vergleichen/testen es muss nicht unbedingt die Datei selber sein.

zB: is_unicode()

Das läuft aber erst ab php6.0 un meine Server haben nur 5.2 :mad:


Hat vielleicht noch einer ne Idee oder Workaround?


Gruß Napofis
 
Zuletzt bearbeitet:
Ich glaube etwas gefunden zu haben :)

PHP:
function is_utf8($string) {
        return preg_match('%^(?:
              [\x09\x0A\x0D\x20-\x7E]            # ASCII
            | [\xC2-\xDF][\x80-\xBF]             # non-overlong 2-byte
            |  \xE0[\xA0-\xBF][\x80-\xBF]        # excluding overlongs
            | [\xE1-\xEC\xEE\xEF][\x80-\xBF]{2}  # straight 3-byte
            |  \xED[\x80-\x9F][\x80-\xBF]        # excluding surrogates
            |  \xF0[\x90-\xBF][\x80-\xBF]{2}     # planes 1-3
            | [\xF1-\xF3][\x80-\xBF]{3}          # planes 4-15
            |  \xF4[\x80-\x8F][\x80-\xBF]{2}     # plane 16
        )*$%xs', $string);
    }

Mal sehn ob es Funktioniert.
 
Zurück