strftime() und utf8 unter Windows

Geschreiben von Paltar am April 10, 2011 in PHP |

Ich hatte kürzlich etwas Probleme mit der PHP-Funktion strftime(). Und zwar wollte ich mit strftime('%B'); den Monat als Text ausgeben. Nun war der Monat aber ‘März’ und das ‘ä’ wurde nicht korrekt angezeigt. Und das trotz setlocale(LC_ALL, 'de_DE.UTF8');.

Nach einiger Suche im Internet habe ich dann auch herausgefunden wieso: Es lag am Betriebssystem Windows, auf dem die Funktion strftime() offenbar grundsätzlich keinen utf8 Text liefert.

Also hab ich alle Ausgaben von strftime() mit der Funktion utf8_encode() in utf8 kodiert. Und das hat auch funktioniert. Nur leider habe ich nicht daran gedacht, dass der Live-Server, im Gegensatz zu meiner Entwicklungsumgebung, unter Linux läuft. Auf dem Linuxserver wurde nun also der ‘März’ gleich doppelt utf8 kodiert und das ‘ä’ wurde wieder falsch dargestellt.

Damit die Ausgabe auf beiden Servern richtig erscheint habe ich also eine Unterscheidung nach Server-Betriebssystem eingebaut, die nur auf dem Windows-Server die Funktion utf8_encode() verwendet.

1
2
3
4
$month = strftime('%B');
if (runsOnWindows()) {
    $month = utf8_encode($month);
}

Die Funktion runsOnWindows() sieht dabei so aus:

1
2
3
4
5
6
7
function runsOnWindows() {
    php_uname();
    if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') {
        return true;
    }
    return false;
}

Dieser Beitrag ist auch verfügbar in: Englisch

Bookmark and Share

Tags: , , , ,

Copyright © 2010-2019 Paltars Blog All rights reserved.
Desk Mess Mirrored v1.8.3 Theme von BuyNowShop.com.