Logo von Mediengestaltung Torsten Kelsch

PHP: Scandir erzeugt komische Zeichen unter Windows

Ich programmierte vor kurzem ein PHP-Skript, das die Dateien aus einem bestimmten Verzeichnis auslesen und als Links auf einer Webseite ausgeben sollte, um die Dateien zum Herunterladen anzubieten. In meiner Testumgebung auf dem lokalen Windows®-PC wurden bei einigen Dateinamen komische Zeichen angezeigt. Und zwar bei allen Dateinamen, die Umlaute, Akzente oder Sonderzeichen enthielten. Auf dem Webserver, der unter einem Linux-Betriebssystem läuft, trat dieses Problem nicht auf.

Nach langer Suche fand ich bei ComputerBase den Hinweis, dass es wohl daran liegt, dass Windows Dateinamen nicht in UTF-8 kodiert, sondern in CP-1252 oder ISO-8859-1. Mein Skript war allerdings in UTF-8 gespeichert (wie es ja üblich ist), was zu dem Zeichensalat führen musste.

Um von vornherein Problemen aus dem Weg zu gehen, verwendet man in Dateinamen fürs Web am besten gar keine Umlaute, Akzente, Leerzeichen und Sonderzeichen. Und wenn Dateien automatisch chronologisch sortiert werden sollen, benutzt man natürlich ein immer gleich bleibendes Dateinamensschema, also zum Beispiel katzenfoto-2016-03.pdf, katzenfoto-2016-04.pdf und so weiter, und nicht ein Mischmasch wie etwa KATZENFOTO März 2016.pdf und Katzenfoto 04.2016.pdf oder ähnlich, noch zumal unter UNIX® und Linux Groß- und Kleinschreibung unterschieden wird, anders als unter Windows. »Schön« sind natürlich auch Namen, die keinerlei Hinweis auf den Inhalt der Datei geben, wie etwa P3290153.JPG. Doch genau solche Dateien mit Namen, die durcheinander sind wie Kraut und Rüben, erhalte ich immer wieder von Kunden. Denn sie wissen nicht, was sie tun.

Schreibe einen Kommentar

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

Mit Absenden dieses Kommentarformulars bestätigst du, dass du die Datenschutzerklärung gelesen hast und dich mit der Speicherung deiner Daten einverstanden erklärst. Deine Daten werden nur benötigt, um dich gegebenenfalls zwecks Beantwortung deiner Anfrage kontaktieren zu können, und werden weder an Dritte weitergegeben noch zu Werbezwecken missbraucht.