WordPress: beim Upload Umlaute und scharfes „s“ aus Dateinamen entfernen

substation 1705947 1920
Bildquelle: Pixabay, maxmann

Was bei Titletags seit WordPress 3.6 geht, nämlich die Umwandlung von Umlauten in „ae“, „oe“ und „ue“, vermisse ich bei WordPress für Dateinamen immer noch. Grundsätzlich funktioniert es zwar, Bilder mit Umlauten und scharfem »ß« in Dateinamen einzusetzen, allerdings können diese Zeichen in Dateinamen selbst innerhalb von WordPress zu Lesefehlern führen. Betroffene Bilder konnte ich beim Testen in der Vorschauansicht der Mediathek nach dem Hochladen nicht sehen (in der Detailansicht allerdings schon).

dateinamen-sanitizen

Im Vergleich der Funktionen sanitize_file_name() und sanitize_title() fällt auf, dass die Titel durch die Funktion remove_accents() geschickt werden. Denselben Zeichenfilter testete ich an Dateinamen (wird nur auf Dateien angewendet die noch hochgeladen werden, nicht bestehende).

function pppf_extend_filename_sanitization($title) {
    return remove_accents($title);
}
add_filter( 'sanitize_file_name','pppf_extend_filename_sanitization');

Ergebnis mit denselben vier Testdateien

dateinamen-sanitizen-mit-filter

Durchgehende Kleinschreibung

Mit strotolower werden Großbuchstaben in Dateinamen abschließend noch in Kleinbuchstaben umgewandelt.

function pppf_extend_filename_sanitization($title) {
    return strtolower(remove_accents($title));
}
add_filter( 'sanitize_file_name','pppf_extend_filename_sanitization');

Es ist nicht auszuschließen, dass beim XML-Import einer WordPress-Site die Dateinamen in Posts ebenfalls umbenannt werden, die Dateien selbst aber nicht. In einem solchen Fall müsste die Funktion vorübergehend ausgesetzt werden, oder betroffene Dateien umbenannt.

Test ohne Funktion

umlaute-im-dateinamen

Test mit Funktion als / in einem Plugin

umlaute-im-dateinamen-sanitized

Test mit Funktion in der functions.php

umlaute-im-dateinamen-sanitized-functions.php

Damit der Filter für Umlaute korrekt funktioniert, muss die Sprache der Site auf Deutsch (de_DE oder de_DE_formal) gestellt sein, oder die Abfrage wird entsprechend umgeschrieben.

// Used for locale-specific rules
 $locale = get_locale();
 
 if ( 'de_DE' == $locale || 'de_DE_formal' == $locale ) {
    $chars[ chr(195).chr(132) ] = 'Ae';
    $chars[ chr(195).chr(164) ] = 'ae';
    $chars[ chr(195).chr(150) ] = 'Oe';
    $chars[ chr(195).chr(182) ] = 'oe';
    $chars[ chr(195).chr(156) ] = 'Ue';
    $chars[ chr(195).chr(188) ] = 'ue';
    $chars[ chr(195).chr(159) ] = 'ss';
 }

Erweiterung der Funktion bei anderen Spracheinstellungen

function pppf_extend_filename_sanitization($title) {
    $locale = get_locale();
    if (seems_utf8($title) && ( 'de_DE' != $locale && 'de_DE_formal' != $locale )) {
        $chars[ chr(195).chr(132) ] = 'Ae';
        $chars[ chr(195).chr(164) ] = 'ae';
        $chars[ chr(195).chr(150) ] = 'Oe';
        $chars[ chr(195).chr(182) ] = 'oe';
        $chars[ chr(195).chr(156) ] = 'Ue';
        $chars[ chr(195).chr(188) ] = 'ue';
        $chars[ chr(195).chr(159) ] = 'ss'; 
    $title = strtr($title, $chars);
    }
    return strtolower(remove_accents($title));
}
add_filter( 'sanitize_file_name','pppf_extend_filename_sanitization');
umlaute-korrekt-ersetzt-mit-en-us

Die angefügte erweiterte Funktion pppf_extend_filename_sanitization() wurde lediglich mit der Spracheinstellung en_US getestet

6 Antworten zu „WordPress: beim Upload Umlaute und scharfes „s“ aus Dateinamen entfernen“

  1. Peter

    Das ist ja schön und gut, aber bei mir wandelt WordPress die Umlaute bei Bildern nicht automatisch um. Ist das normal? Wenn ich eine Testgrafik mit äüö.jpg hochlade, kommt ä ö ü dabei heraus, jeweils mit Leerzeichen, aber kein ae, oe, ue etc.

    1. Gabriele Lässer

      Möglicherweise spielt die Position der Funktion eine Rolle, resp. wann der Filter greift. Bei mir war die Funktion als ich sie testete in einem Plugin. Ich überprüfe wie sie sich in der functions.php vom Theme verhält und ergänze dann den Beitrag.

      1. Peter

        Nunja, das "ß" wird ja in "s" umgewandelt, aber Umlaute eben nicht. Was im Grunde viel wichtiger ist.

        1. Gabriele Lässer

          Interessanter Hinweis. Ist die Spracheinstellung der Site denn Deutsch?

          1. Peter

            Ja klar, sonst würde ich mich auch nicht wundern.

          2. Gabriele Lässer

            Geht mir grade auch so, dass ich mich wundere. Natürlich gibt es dafür eine Erklärung, aber ohne nähere Untersuchung fällt mir dazu im Moment nichts mehr ein. Wird strtolower auch verwendet und in derselben Abfolge? Wenn man die Funktionen umkehrt, führt das auch zu unvorhersehbaren Ergebnissen.

Bitte Kommentarfunktion nicht für Supportanfragen nutzen. Dem kann hier nicht entsprochen werden. Die Angabe einer E-Mail-Adresse und eines Namens ist nicht erforderlich. Einen (Spitz)-Namen zu nennen wäre aber doch nett.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Hinweis: Sowohl angegebener Name als auch E-Mail-Adresse (beides ist optional, dafür werden alle Kommentare vor Veröffentlichung geprüft) werden dauerhaft gespeichert. Du kannst jeder Zeit die Löschung Deiner Daten oder / und Kommentare einfordern, direkt über dieses Formular (wird nicht veröffentlicht, und im Anschluss gelöscht), und ich werde das umgehend erledigen. – Mit hinterlassenen Kommentaren hinterlegte IP-Adressen werden nach zwei Monaten automatisch gelöscht

publicly queryable