Umlaute in Dateinamen

Thomas D

Erfahrenes Mitglied
Hallo!

Ich habe auf einem Apache Server Dateien, die Sonderzeichen beinhalten (also beispielsweise 'Kästchen.jpg'). Wenn ich nun per PHP-Script alle Dateien aus einem Folder auslese und eine dieser Dateien enthält einen Umlaut, dann wird dieser nicht korrekt dargestellt Gibt es hierfür einen sinnvollen Workaround oder soll ich Umlaute generell verbieten (komfortabler wäre es natürlich mit)?

MfG, Thomas D.
 
Das wäre eine Möglichkeit...

PHP:
$var = "Kästchen.jpg";

$var = ereg_replace('ö',"ö",$var);
$var = ereg_replace('Ö',"Ö",$var);
$var= ereg_replace('ä',"ä",$var);
$var = ereg_replace('Ä',"Ä",$var);
$var = ereg_replace('ü',"ü",$var);
$var = ereg_replace('Ü',"Ü",$var);
 
Also ich lese die Dateinamen aller Files in einem bestimmten Folder wie folgt aus:

Code:
    $tempFolder = $imgFolder ."/" .$id ."/" .$thumb;
    if (is_dir ($tempFolder))
    {
        $folderHandle = opendir ($tempFolder);
        
        while ($file = readdir ($folderHandle))
        {
            if ($file != "." && $file != "..")
                array_push ($thumbArr, $file);
        }
        closedir ($folderHandle);
    }

Wenn ich jetzt eines mit einem Umlaut ausgebe, dann bekomme ich die folgende Ausgabe: 03_K?stchen.gif Das 'ä' in 'Kästchen.gif' kann also scheinbar nicht verarbeitet werden. Wäre echt super, wenn es hier eine Möglichkeit gäbe, dies zum Funktionieren zu bringen :) ...

MfG, Thomas D.
 
Also ich denke da es sich um datein handel sollte man sich auch an das vorgeben dateischema halten.

Keine Sonderzeichen in dateinamen, endungen nach dem punkt max 3 stellen unsw.

Mit htmlentities() erhaltet man genau so sonderzeichen was zu problemen beim Aufrufen der datei führen kann.

Ich würde einfach die umlaute in die alt gewonnte schreibweise darstellen

ö als oe
ä als ae

unsw dazu kann das obige bsp. verwenden oder die funktion str_replace
PHP:
<?
$dateiname=str_replace("ä","ae",$dateiname );
?>

Mfg Splasch
 
Wenn es in HTML genutzt wird, musst du gegebenenfalls die Zeichenkodierung anpassen (anscheinend verwendest du UTF-8 als Ausgabekodierung, also utf8_encode()-Funktion).
PHP:
// nur bei UTF-8-Ausgabe
echo utf8_encode($file);
Wenn es als URL genutzt wird, musst du die Zeichen entsprechend der so genannten URL-Kodierung kodieren (rawurlencode()-Funktion).
PHP:
'<a href="'.rawurlencode($file).'">'
Zusammen also beispielsweise:
PHP:
echo '<a href="'.rawurlencode($file).'">'.utf8_encode($file).'</a>';
 
@Gumbo: Danke für deine detailierte Antwort :)! Das mit UTF8-Encode hat funktioniert, allerdings verwende ich den Link auf in einem src-Attribut eines Bildes und hier klappt es leider gar nicht. Die URL ist zwar in der Therorie richtig (also mit korrektem 'ä'), allerdings kann die Graphik damit nicht angezeigt werden. Auch rawurlencode() oder htmlentities() helfen hier leider gar nichts :(. Wie gesagt: Das 'ä' wird im Text korrekt dargestellt, doch in einem src-Attribut eines <img> t es leider überhaupt nicht.

@splasch: Bei dieser Lösung hast du das Problem, dass auch gewollte Kombinationen von {oe, ae, ue} in {ö, ä, ü} umgewandelt werden - z.B.: Hors d'Oeuvre, Lueger (ehemaliger Bürgermeister von Wien), Loewe (Fernseherhersteller), etc.
 
Möglicherweise musst du auch dort erst zur UTF-8-Kodierung konvertieren, also:
PHP:
rawurlencode(utf8_encode($file))
Bei Pfadangaben, die nicht nur aus Dateiname bestehen (also beispielsweise nur „foobar.jpeg“), musst du sie zuerst noch bei den Schrägstrichen zerteilen und die Segmente einzeln kodieren:
PHP:
implode('/', array_map('rawurlencode', explode('/', $path)))
 
Bei Pfadangaben, die nicht nur aus Dateiname bestehen (also beispielsweise nur „foobar.jpeg“), musst du sie zuerst noch bei den Schrägstrichen zerteilen und die Segmente einzeln kodieren:
PHP:
implode('/', array_map('rawurlencode', explode('/', $path)))

Das funktiniert leider auch nicht. Ich glaube, ich werde Sonderzeichen einfach verbieten müssen :-( ...
 
Zurück