Coding | Hooks und Filter

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

substation 1705947 1920

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 <a href="https://developer.wordpress.org/reference/functions/sanitize_file_name/" target="_blank">sanitize_file_name()</a> und <a href="https://developer.wordpress.org/reference/functions/sanitize_title/" target="_blank">sanitize_title()</a> fällt auf, dass die Titel durch die Funktion <a href="https://developer.wordpress.org/reference/functions/remove_accents/" target="_blank">remove_accents</a>() 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 unwahrscheinlich, 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, da_AT oder de_CH werden nicht berücksichtigt) gestellt sein
// 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

weiter schmökern

6 Comments

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

Schreibe einen Kommentar

Bitte Kommentarfunktion nicht für Supportanfragen nutzen. Dem kann hier nicht entsprochen werden.

Deine E-Mail-Adresse wird nicht veröffentlicht.