T-Rex: strtoupper, utf8 und mb_internal_encoding('UTF-8')

Moin,

hab gerade von einem User den Fehler bekommen das man keine Umlaute mehr abspeichern könnte. Hab eigentlich gedacht die Probleme mit Zeichencodierung würden der Vergangenheit angehören...

Am Anfang jedes Scriptes steht bei uns ein
mb_internal_encoding('UTF-8');

Damit sollten eigentlich alle String Funktionen von PHP auf utf8 Zeichencodierung umgebogen werden. Hab den Fehler dann soweit eingegrenzt, dass ich ein strtoupper dafür verantwortlich machen kann. Hab das strtoupper mal spaßes halber auf mb_strtoupper geändert. Und auf einmal funktioniert es wieder. Ich könnte schwören das hat schonmal ohne das mb_ davor funktioniert.

Jetzt geht das kuriose aber weiter.
Der Fehler tritt nur auf unseren localhosts aus (Windows). Auch hier könnte ich schwören war der Fehler früher nicht. Auf dem Webserver (linux), der gestern ein frisches Update bekommen hat läuft der Code ohne mb_ bei strtoupper.

Jetzt möchte ich natürlich dass der Code weiterhin ohne das Anhängsel mb_ funktioniert bin aber etwas ratlos...

Gruß
mb_T-Rex

  1. Tach!

    Am Anfang jedes Scriptes steht bei uns ein
    mb_internal_encoding('UTF-8');
    Damit sollten eigentlich alle String Funktionen von PHP auf utf8 Zeichencodierung umgebogen werden.

    Nein, diese Annahme ist falsch. Die Funktion wirkt sich nur auf die mb_*-Funktionen aus. Es gibt zwar einen Konfigurationsparameter, der einige der einfachen Stringfunktionen durch ihre MB-Pendants ersetzt, aber den wirst du sicher nicht gesetzt haben.

    Hab den Fehler dann soweit eingegrenzt, dass ich ein strtoupper dafür verantwortlich machen kann. Hab das strtoupper mal spaßes halber auf mb_strtoupper geändert. Und auf einmal funktioniert es wieder. Ich könnte schwören das hat schonmal ohne das mb_ davor funktioniert.

    Nicht einfach so.

    Der Fehler tritt nur auf unseren localhosts aus (Windows). Auch hier könnte ich schwören war der Fehler früher nicht. Auf dem Webserver (linux), der gestern ein frisches Update bekommen hat läuft der Code ohne mb_ bei strtoupper.

    Auch hier kommt meines Wissens nur das Overloading als verdächtige Instanz infrage.

    Jetzt möchte ich natürlich dass der Code weiterhin ohne das Anhängsel mb_ funktioniert bin aber etwas ratlos...

    Warte bis PHP endlich richtig multibytefähig geworden ist.

    dedlfix.