dedlfix: Umlaute im XHTML

Beitrag lesen

Hi!

Die Idee meines Vorhabens ist es, Dateinamen aus einem Serververzeichnis in einen Array zu schreiben und anschliessend als link im HTML auszugeben. Nachdem ich nun mit $array[] = utf8_encode($filename); alle Dateinamen in $array geschrieben habe und korrekt mit Umlauten im HTML ausgebe, gelingt es mir nicht die Datei downzuloaden. Sofort kommt meine Fehlerseite: "Datei unauffindbar". Dabei stimmt der Quelltext und die Bezeichnung der Datei auf dem Server absolut überein.

Für dich sind es Zeichen, für den Rechner nur Bytes. Wenn du nun eine andere Kodierung und damit andere Bytes verwendest, ist das nicht mehr das selbe. Ein weiteres Problem besteht darin, dass die Kodierung der Dateinamen je nach System unterschiedlich sein kann und es keinen Mechanismus gibt, aus PHP abzufragen, welche Kodierung das Dateisystem verwendet. Es ist anzuraten, eine Kodierung zu verwenden, die die Bytewerte unberührt lässt. Das von Deus Figendi erwähnte (raw)urlencode() kann dir helfen. Das entschäft unter anderem alle Nicht-ASCII-Zeichen. Wenn du solch einen Wert aber über $_GET oder $_POST zurückbekommst, ist er schon wieder in seiner ursprünglichen Form.

Nun hast du mit rawurlencode() zwar einen sicheren, aber keinen schön anzuschauenden Dateinamen. Das lässt sich auch hinbekommen, indem du als Linktext den utf8_encode()ierten und als Linkziel den rawurlencode()ierten nimmst.

Lo!