Dieses Skript macht folgendes
- Umlaute werden konvertiert, also z.B. wird "ä" zu "ae"
- Whitespace (Leerzeichen etc.) wird durch einen Unterstrich ersetzt
- Alles wird in Kleinbuchstaben umgewandelt
- alle Zeichen die nicht in der hier vorgegebenen Zeichenklasse [a-z0-9_-.] enthalten sind werden entfernt
Sinnvoll einsetzbar ist es dort, wo es durch Speichern von Dokumenten bzw. Dateien unter ungültigen Namen zu Fehlern kommen kann.
<?php
/**
* Dateinamen bereinigen
*/
function TidyFilename($val)
{
// whitespace durch Unterstrich ersetzen
$new = preg_replace('=(\s+)=', '_', $val);
// Liste aller Umlaute
$map = array(
'ä' => 'ae',
'Ä' => 'ae',
'ß'=>'ss',
'ö'=>'oe',
'Ö' => 'oe',
'Ü'=>'ue',
'ü'=>'ue',
// hier ggf. weitere Zeichen ergänzen, z.B.
'à' => 'a',
'é' => 'e',
'è' => 'e',
);
// Umlaute konvertieren
$new = str_replace(array_keys($map), array_values($map), $new);
// Kleinschreibung
$new = strtolower($new);
// alle anderen Zeichen verwerfen
$new = preg_replace('#[^a-z0-9_.-]#', '', $new);
return $new;
}
// ein paar Beispiele für weniger schöne Dateinamen
$dirty_names = array(
'Übersicht.html',
'Eine kleine Beispielseite.html',
'Ölfaß.doc',
'TEST ÄÖÜ .doc',
'häHä.php',
'Mit Binde-Strich 123.doc',
'sécurité intérieure.html',
'ŠmØrë-Brød röm pöm pöm pö',
);
// Ausgabe
foreach ($dirty_names as $dirty){
$tidy = TidyFilename($dirty);
printf('"<strong>%s</strong>" wird zu "<em>%s</em>"<br>', $dirty, $tidy);
}
?>