| 

.NET C# Java Javascript Exception

7
Wieder ein sehr komischer Bug, diesmal in Zusammenhang mit der Funktion basename(): Die basename() Funktion wird dazu verwendet den letzten Namensteil eines Pfades zurückzugeben. Beispiele: Funktioniert wunderbar. Auch mit Umlauten innerhalb eines Dateinamens kein Problem: Steht aber ein Umlaut am Anfang des Dateinamens, dann gibt basename() einen falschen Dateinamen zurück: Autsch! Warum funktioniert die Funktion […]

umlauteWieder ein sehr komischer Bug, diesmal in Zusammenhang mit der Funktion basename():

Die basename() Funktion wird dazu verwendet den letzten Namensteil eines Pfades zurückzugeben. Beispiele:

echo basename('/home/michael/datei.txt'); // -> datei.txt
echo basename('/home/michael/ordner'); // -> ordner
echo basename('/home/michael/ordner/'); // -> ordner

Funktioniert wunderbar. Auch mit Umlauten innerhalb eines Dateinamens kein Problem:

echo basename('/home/michael/trööööt.txt'); // -> trööööt.txt

Steht aber ein Umlaut am Anfang des Dateinamens, dann gibt basename() einen falschen Dateinamen zurück:

echo basename('/home/michael/öööhhh.txt'); // -> hhh.txt

Autsch! Warum funktioniert die Funktion mit Umlauten in der Mitte, aber nicht am Anfang des Dateinamens?

Einer der beiden Hinweise auf der Manual-Seite gibt die Lösung: basename beachtet die Spracheinstellungen (locale). Ich gucke also nach welche ich aktuell verwende:

var_dump(setlocale(LC_ALL, 0)); // -> string(1) "C"

Es kam zutage dass meine aktuelle Einstellung auf “C” stand. Stelle ich also die Locale mal mit Hilfe von setlocale() auf einen Mehrbytezeichensatz:

setlocale(LC_ALL, 'en_US.UTF8');

Auf der Konsole unter Linux kann man sich mit dem Befehl

locale -a

die installierten Locales anzeigen lassen. Es muss nur irgendein mehrbytefähiger Zeichensatz sein damit der Bug behoben ist, und en_US.UTF8 ist immer installiert im Gegensatz zu de_DE.UTF8

Und schon ist das Problem behoben, der Dateiname wird korrekt ausgegeben auch wenn ein oder mehrere Umlaute am Anfang stehen.

php umlaute basename mehrbyte
Schreibe einen Kommentar:
Themen:
mehrbyte basename umlaute php
Entweder einloggen... ...oder ohne Wartezeit registrieren
Benutzername
Passwort
Passwort wiederholen
E-Mail