# Umlaute in Dateinamen



## Thomas D (25. Januar 2008)

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.


----------



## brainsucker (26. Januar 2008)

Das wäre eine Möglichkeit...


```
$var = "Kästchen.jpg";

$var = ereg_replace('ö',"&ouml;",$var);
$var = ereg_replace('Ö',"&Ouml;",$var);
$var= ereg_replace('ä',"&auml;",$var);
$var = ereg_replace('Ä',"&Auml;",$var);
$var = ereg_replace('ü',"&uuml;",$var);
$var = ereg_replace('Ü',"&Uuml;",$var);
```


----------



## Gumbo (26. Januar 2008)

brainsucker hat gesagt.:


> Das wäre eine Möglichkeit...


Dafür gibt es bereits die htmlentities()-Funktion.

Aber ob das die Lösung des Problems ist, hängt davon ab, was genau das Problem ist. Was genau wird also nicht richtig dargestellt?


----------



## Thomas D (26. Januar 2008)

Also ich lese die Dateinamen aller Files in einem bestimmten Folder wie folgt aus:


```
$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.


----------



## splasch (26. Januar 2008)

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

```
<?
$dateiname=str_replace("ä","ae",$dateiname );
?>
```

Mfg Splasch


----------



## Gumbo (26. Januar 2008)

Wenn es in HTML genutzt wird, musst du gegebenenfalls die Zeichenkodierung anpassen (anscheinend verwendest du UTF-8 als Ausgabekodierung, also utf8_encode()-Funktion).
	
	
	



```
// 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).
	
	
	



```
'<a href="'.rawurlencode($file).'">'
```
Zusammen also beispielsweise:
	
	
	



```
echo '<a href="'.rawurlencode($file).'">'.utf8_encode($file).'</a>';
```


----------



## Thomas D (26. Januar 2008)

@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.


----------



## Gumbo (26. Januar 2008)

Möglicherweise musst du auch dort erst zur UTF-8-Kodierung konvertieren, also:
	
	
	



```
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:
	
	
	



```
implode('/', array_map('rawurlencode', explode('/', $path)))
```


----------



## Thomas D (26. Januar 2008)

Gumbo hat gesagt.:


> 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:
> 
> 
> 
> ...



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


----------

