Hallo,
Eine Datei wird unter Windows XP (Deutsch) mit dem Namen sÄÜ.txt einmal im UTF8 Format und einmal als ANSI gespeichert.
deine weiteren Ausführungen lassen nur einen Schluss zu: Die obige Annahme ist falsch, die vermeintlich in UTF-8 gespeicherte Datei ist _nicht_ UTF-8.
Vergleiche mal die Dateigröße: Die in ISO-8859-x oder Windows-1252 gespeicherte (also das, was Windows unter "ANSI" versteht) dürfte 7 Byte lang sein (oder 9, wenn sie am Ende des Strings noch einen Zeilenumbruch hat), die andere 9 (oder 11 mit zeilenumbruch), ggf. sogar 12 bzw. 14, wenn sie mit BOM gespeichert wurde. Hinweis: Notepad speichert UTF-8 immer mit BOM.
Wenn ich nun die länge der Datei mit PHP ermitteln möchte bekomme ich mit strlen den Wert 7 und mit mb_strlen($f, 'utf8') den Wert 6 unabhängig in welchem Format. Also immer gleich.
Ausgabe:
das file t ist s??.kdk mit länge 7 und 6
Das ist die in ISO ("ANSI") gespeicherte Fassung. Da darf mb_strlen() zu einem falschen Ergebnis kommen, weil Bytefolgen auftreten, die in UTF-8 nicht zulässig sind und die korrekte Zählung behindern.
Und bei der in UTF-8 gespeicherten Version? Vermutlich 12 und 8?
if(is_dir($useruploadtmp)){
$d = opendir($useruploadtmp);
while (false !== ($f = readdir($d))){
if(is_file($useruploadtmp . "/" . $f)){
$filename_ges = strlen($f);
$filename_ges_utf8 = mb_strlen($f, 'utf8');
echo "<br><br>das file t ist $f mit länge $filename_ges und $filename_ges_utf8<br>";
}
}
closedir($d);
}
> Eigentlich rechnet strlen ja richtig obwohl ich annahm das die Zeichen ÄÜ doppelt gezählt werden.
> Mache ich einen Denkfehler?
Ja: Du verschweigst die Auswertung der in UTF-8 gespeicherten Datei.
So long,
Martin
--
Die letzten Worte des Neandertalers:
Möchte doch zu gern wissen, was in der Höhle ist ...