Downloadziel mit Umlaut > 404 > Umlaut krypt

Hallo Experten,

ich hoffe, das ist das richtige Brett, denn ich denke, dass es kein reines HTML-, PHP- oder SQL-Problem ist. Ob’s an irgendeiner Software liegt, ist nicht klar. Darum poste ich’s einfach mal hier. Das folgende Problem besteht erst seit einigen Tagen, vorher hat alles stets funktioniert. Ich bin (außer den Provider-Mitarbeitern) die einzige Person mit Zugriff auf Webspace und Datenbank. Die Dateien wurden zur Kontrolle via FTP heruntergeladen und die Quelltexte mit den lokalen Backups verglichen. Es wurden definitiv in der Zwischenzeit keine Änderungen am Script vorgenommen. Also:

Download-Links werden aus einer MySQL-Datenbank ausgelesen und aufgelistet. Die Downloads funtionieren, jedoch werden bei den Dateien mit Umlauten im Dateinamen 404-Meldungen generiert. Die Meldungen zeigen statt der Umlaute kryptische Zeichen. Im Quelltext der Download-Seite ist alles okay, die Umlaute sind korrekt vorhanden. Der Linktext und jeder andere Text werden korrekt dargestellt. Das Linkziel wird beim Überfahren der Links mit dem Mauszeiger ebenfalls korrekt mit Umlauten in der Statusleiste angezeigt. Die entsprechenden Dateien sind korrekt (mit Umlauten) auf dem Server vorhanden. Das Problem betrifft alle von mir getesteten aktuellen Browser (z.B. Opera 9, Internet Explorer 7, Firefox 3). Der von mir kontaktierte Support konnte das Problem reproduzieren und war ratlos, denn es ist ja eigentlich soweit alles korrekt.

Bei Uploads über das Formular der gleichen Seite werden die Dateinamen mit Umlauten komischerweise richtig vergeben, die Dateien werden fehlerfrei mit Umlauten im Dateinamen abgespeichert und die Linkziele werden korrekt mit Umlauten in der DB eingetragen (hab’s mehrfach kontrolliert). Andere Übertragungen wie z.B. Forumeinträge sind ebenfalls korrekt und werden beim Aufruf korrekt aus der DB ausgelesen und dargestellt. Es funktioniert also eigentlich alles: Übertragung, Aufruf aus SQL-Datenbank, Darstellung der Ergebnisse u.s.w. Bloß bei Dateidownloads werden irgendwo zwischen Browser und Server (auf dem Server?) die Zeichen des Linkziels verdrillert. Achso:

Andere Doctypes oder Charsets bringen keine Besserung. Es ist immer gleich, es sei denn, dass im Charset keine Umlaute vorhanden sind. Aber dann wäre ja klar, warum es nicht funktioniert.

Hat irgendjemand noch eine Idee, woran das liegen könnte?

LG
Huttatta

Hallo,

Das folgende Problem besteht erst seit
einigen Tagen, vorher hat alles stets funktioniert.

Was hat sich geändert? Was hat sich geändert bevor sich nichts geändert hat? :wink:
Hat dein Hoster vielleicht irgend welche Software aktualisiert?

Download-Links werden aus einer MySQL-Datenbank ausgelesen und
aufgelistet. Die Downloads funtionieren, jedoch werden bei den
Dateien mit Umlauten im Dateinamen 404-Meldungen generiert.

Wie sieht so ein Downloadlink bespielsweise aus?

Die Meldungen zeigen statt der Umlaute kryptische Zeichen. Im
Quelltext der Download-Seite ist alles okay, die Umlaute sind
korrekt vorhanden.

Was bedeutet „korrekt“? URLs können nur ASCII-Zeichen enthalten, deswegen werden Umlaute üblicherweise in UTF-8 kodiert und dann mit %XX escaped.

Der Linktext und jeder andere Text werden
korrekt dargestellt. Das Linkziel wird beim Überfahren der
Links mit dem Mauszeiger ebenfalls korrekt mit Umlauten in der
Statusleiste angezeigt. Die entsprechenden Dateien sind
korrekt (mit Umlauten) auf dem Server vorhanden.

In welcher Zeichenkodierung sind die Dateinamen auf dem Server?

Das Problem
betrifft alle von mir getesteten aktuellen Browser (z.B. Opera
9, Internet Explorer 7, Firefox 3). Der von mir kontaktierte
Support konnte das Problem reproduzieren und war ratlos, denn
es ist ja eigentlich soweit alles korrekt.

Bei Uploads über das Formular der gleichen Seite werden die
Dateinamen mit Umlauten komischerweise richtig vergeben, die
Dateien werden fehlerfrei mit Umlauten im Dateinamen
abgespeichert und die Linkziele werden korrekt mit Umlauten in
der DB eingetragen (hab’s mehrfach kontrolliert).

Was für einen Wert hat das accept-charset attribut der Form? In welcher Zeichenkodierung sind die Dateinamen auf dem Client, der die Dateien hoch lädt?

Andere Doctypes oder Charsets bringen keine Besserung.

Klar, die URLs sind ja ASCII und damit unabhängig von dem charset, in dem das HTML interpretiert wird.

Hat irgendjemand noch eine Idee, woran das liegen könnte?

Ja. Dateinamen haben keine Metadaten, die beschreiben, in welcher Zeichenkodierung sie vorliegen. Das macht jedes System, das mit nicht-ASCII-Dateinamen umgehen muss fragil. Also lass es, und beschränke dich auf ASCII-Zeichen.

Grüße,
Moritz

umlaute in einer URL ??? warscheinlich noch im klartext…

http://de.wikipedia.org/wiki/URL-Kodierung#Nicht-ASC…

Danke für die Antworten
Hallo,

ihr habt beide absolut Recht! (*) Weil Dateien von Benutzern hochgeladen werden, die nicht selten Umlaute im Dateinamen enthalten, komme ich wohl nicht umhin, die Umlaute vor dem Speichern entsprechend zu ändern. Was mich bloß stutzig macht, ist die Tatsache, dass das Ganze (wurde aus Zeitknappheit quick & dirty gescriptet) bis vor kurzem ein Jahr lang absolut problemlos funktioniert hat. Da es nie Probleme gab, hatte ich keine Veranlassung, entsprechende Maßnahmen zu ergreifen. Am Script wurde aber definitiv seit dem Start der Website vor etwa einem Jahr nichts geändert. Auf die Frage „Was wurde geändert, bevor nichts geändert wurde?“, kann ich bloß antworten: „Ich habe keine Kenntnis von irgendwelchen Änderungen, außer dass jetzt immer mehr Leute neuere Browser wie z.B. FF3 benutzen.“ Der Provider behauptet, bei ihnen habe sich auch nichts geändert. Ich vermute, dass die neuen Browser das nicht mehr einfach so mitmachen. Der Support berichtete mir, dass FF2 die Dateien ohne Murren herunterlädt, während Op9, IE7 und FF3 die 404 zeigen. Ich mache mich dann mal in Ruhe an die Arbeit und in ner halben Stunde ist der Käse gegessen. Ich hoffte bloß, irgendwie darum herum zu kommen. :wink:

LG
Huttatta