Zichensatz Kodierung Windows - Linux

Hallo ihr lieben,

ich hätte da mal wieder ein Problemchen das mich um den Verstand bringt.

Auf meinem Rechner (Windows) programmiere ich Local neben her in XAMPP, wenn ich dort den Inhalt eines Ordners ausgeben möchte, also die Ordnernamen, werden die Umlaute nicht richtig dargestellt.

Folgender Quellcode läuft auf beiden Geräten einmal Local in XAMPP unter Windows und dann hier auf den Servern. Wenn ich es hier laufen lasse werden die Namen jedoch richtig ausgegeben.

Ich würde aber gern auch den kompletten Umfang dieser Funktion auch auf meinem Windows Rechner nutzen können.

[code]<?php

header(“Content-Type: text/html; charset=UTF-8”);

echo "String: " . $str = “äöü” . " - ";
echo mb_detect_encoding($str);
echo “

”;
////////////////////////////////////////////////////////////////////////////////

$dir = “…/…/content_data”;
$directory = opendir($dir);
while ($file = readdir($directory)) {
echo "$file - ";
echo mb_detect_encoding($file);
echo “
”;
echo utf8_ensure($file);
echo “
”;
}
closedir($directory);

function utf8_ensure($str) {
return mb_check_encoding($str, ‘UTF-8’) ? $str : mb_convert_encoding($str, ‘UTF-8’, ‘auto’);
}
[/code]

Ausgabe Windows/XAMPP:

[code]String: äöü - UTF-8

. - ASCII
.
… - ASCII

.quarantine - ASCII
.quarantine
.tmb - ASCII
.tmb
Dentaltechnik - ASCII
Dentaltechnik
Dentaltechnik.7z - ASCII
Dentaltechnik.7z
desktop.ini - ASCII
desktop.ini
IFA 2015 - ASCII
IFA 2015
Interschutz - mit Umlauten.zip - ASCII
Interschutz - mit Umlauten.zip
Interschutz1 - ASCII
Interschutz1
Labortechnik - ASCII
Labortechnik
Medizintechnik_inkl_KE - ASCII
Medizintechnik_inkl_KE
W�schereitechnik_Geschirrsp�ltechnik - UTF-8
W?schereitechnik_Geschirrsp?ltechnik[/code]

Ausgabe Linux:

[code]String: äöü - UTF-8

. - ASCII
.
… - ASCII

Dentaltechnik - ASCII
Dentaltechnik
Interschutz - ASCII
Interschutz
Labortechnik - ASCII
Labortechnik
Medizintechnik_inkl_KE - ASCII
Medizintechnik_inkl_KE
IFA_2015 - ASCII
IFA_2015
Waeschereitechnik_Geschirrspültechnik - UTF-8
Waeschereitechnik_Geschirrspültechnik[/code]

Was ich nicht verstehe ich warum der String “äöü” in beiden Fällen richtig ausgegeben wird, aber die Ordnernamen nicht.

Ich hoffe ihr könnt mir helfen.

Lieben gruß
Tilodon

weil unter Windows Dateien niemals UTF-8 sind…
Je nach Sprache ist es ein anderes encoding… oder man würde Unicode nutzen damit es “einheitlich” ist… PHP scheint aber kein Unicode zu nutzen bzw. das nicht nach UTF-8 zu übersetzen sondern eher dein locale zu nutzen… also Windows-1252 [size=85](ähnlich zu Latin-1, aber gibt einige Unterschiede)[/size]

Du müsstest also ggf. an deiner PHP config herum experimentieren…
Linux kennst solche Probleme nicht, da gibt es zum Glück nur UTF-8 und es kann daher immer alles darstellen…

Hallo White-Tiger,

danke für deine schnelle Antwort.
Dann werde ich mal anfangen zu experimentieren.

Oder kennt jemand nen guten Workaround?

Lieben Gruß

du müsstest vermutlich u.a. PHP sagen welches Encoding es intern nutzen soll… neuere Versionen nehmen automatisch UTF-8, ältere je nachdem andere…

Ne Idee wo ich das PHP mitteilen kann?

Meine PHP Version ist 5.6.3, sollte eigentlich eine der Aktuellsten sein. :S

EDIT:
Und der default_charset ist auf UTF-8 gesetzt. :S

ich hatte auch noch nie deine genannten Probleme, das sind soweit alles nur wage Möglichkeiten^^ Technisch könnte es aber sehr gut so oder so funktionieren…

Und ich meinte auch nicht zwangsläufig das du es auf UTF-8 setzen sollst, sondern eben verschiedenes probieren… wie UTF-8 aber eben auch Windows-1252…

Nach einer kurzen Recherche scheint es aber so als könnte PHP das derzeit nicht besser… also entweder selber um-kodieren, oder auf PHP 6 warten^^

Nochmals vielen dank.

Ich habe das Problem bis jetzt auch nur auf der Arbeit. ^^
Leider ist es derzeit essenziell. Naja ich werde bestimmt eine Möglichkeit finden.

Lieben Gruß
Tilodon

Windows und Unicode ist immer so eine heikle Angelegenheit. Ich glaube es ist noch nicht mal wirklich möglich das mit PHP zu machen, da PHP nicht “Unicode-aware” ist (Python ftw!).

Ich frage mich was passieren würde, wenn du, mit dem normalen Windows Dateiexplorer, einen Dateinamen mit z.b. folgenden Japanischen Zeichen erstellst:

oder den deutschen Anführungszeichen:

(einfach die Dateinamen von hier herauskopieren)

und dann versuchst den Ordnerinhalt, dort wo die Dateien liegen, mit scandir auszulesen:

[code]

<?php

$files = scandir('path/to/directory');
foreach($files as $file) {
    echo urlencode($file)."\n";
}

?>
[/code]

Dat kommt doch gar nicht mehr. Das nächste wird doch PHP 7.