Unicode-Textdatei für die Verwendung in PHP korrekt auslesen

Pain-maker

Mitglied
Hi @ all!
Ich hab für ein Project von mir viele große Unicode-Textdateien (10-20mb). Die möchte ich nun auslesen und anschließend in eine DB eintragen. Das Script funktioniert bereits blendend bei von mir erstellten Nicht-Unicode-Testdateien, bei Unicode-Dateien scheitert es aber leider. Nun habe ich herausgefunden, dass die Dateien trotz utf8_decode() nicht korrekt umgewandelt werden (wenn ich var_dump() benutze bekomme ich sowas wie: String(3950) "")
Nun wollt ich fragen was ich vielleicht falsch mache oder was ich grundsätzlich noch beachten muss beim Auslesen von Unicode-Dateien für die Verwendung in PHP.

Danke für Hilfe!
Pain-maker
 
Probier mal folgende Funktion:
PHP:
function isUTF8($str)
{
	return preg_match('/^([\x09\x0A\x0D\x20-\x7E]|[\xC2][\xA0-\xBF]|[\xC3-\xDF][\x80-\xBF]|\xE0[\xA0-\xBF][\x80-\xBF]|[\xE1-\xEC\xEE\xEF][\x80-\xBF]{2}|\xED[\x80-\x9F][\x80-\xBF]|\xF0[\x90-\xBF][\x80-\xBF]{2}|[\xF1-\xF3][\x80-\xBF]{3}|\xF4[\x80-\x8F][\x80-\xBF]{2})*$/', $str);
}
 
Nun okay, das ergebniss ist immer "0". Also ist sie nicht UTF-8-kodiert...
uft8_decode() kommt damit ja wohl nicht mehr in Frage, oder?
Aber wie kann ich dann vorgehen?

Schon mal danke, Gumbo!
 
Es ist erst einmal wichtig, herauszufinden, wie die Daten kodiert sind. Wo hast du die Daten denn her?
 
Von einem Freund aus amerika der sie erstellt hat. Genau weiss er allerdings leider auch nicht welche kodierung sie haben. Wie kann ich das denn herausfinden?

// EDIT:
Okay danke für alles Gumbo!
Das mit der Kodierung war ein guter Tipp, denn daran hats auch gelegen!
Hab mir in meinem PHP-Editor (Notepad++) die Kodierung über Format die Kodierung anzeigen lassen (UCS-2) und dann alles über mb_convert_encoding(); jede Zeile in ISO-8859-1 umkodiert.
(Meine Funktion: mb_convert_encoding(fgets($handle), "ISO-8859-1", "UCS-2");)
Kleine Anmerkung:
mb_detect_encoding(); spuckte bei mir ASCII als Ergebniss aus... warum, weiß ich nicht, aber über Notepad++ wurde mir zum Glück ein korrektes Ergebniss angezeigt. Ob mb_detect_encoding(); öfter solche Probleme hat kann ich leider nicht sagen, da ich eigentlich nie mit dieser Funktion arbeite.
Mein Tipp: Einfach über mb_detect_encoding(); versuchen die Zeichenkette zu analysieren und spätestens nach dem Arbieten mit mb_convert_encoding(); merkt man dann schon ob das Ergebniss richtig war oder nicht!

Nochmal danke für alles, Gumbo! :)
(Toll wenn man die Lösung durch Denkanstöße dann selber findet^^)
 
Zuletzt bearbeitet:
Zurück