PHP, Apache og udvidede tegn i filnavne
Jeg er ved at udvikle en web-applikation, der opretter dynamiske
HTML-tabeller over et givent bibliotek.
Jeg er imidlertid stødt ind i problemer, når fil- og biblioteksnavne som
skal indekseres indeholder danske bogstaver; de vises ganske enkelt ikke
korrekt.
Jeg har svært ved at overskue, hvordan man nemt kan løse dette problem,
så jeg forsøger at give en oversigt over symptomerne:
- Når man lader Apache generere et indeks selv (mod_autoindex), bliver
udvidede tegn kodet i noget der ligner Unicode (f.eks. %9B for 'ø') i
adressefeltet. HTML-headeren viser dog blot et '?', og jeg kan se i
kildekoden til siden, at Apache reelt indsætter et ' >' i stedet for
'ø'. I status-baren i browseren vises et kvadrat i stedet for tegnet.
Links til filer og underbiblioteker i dette indeks fungerer dog, når man
klikker på dem, selvom det ikke ser pænt ud.
- Når jeg bruger PHP's readdir()-funktion kommer fil- og biblioteksnavne
tilbage på samme måde som i Apache-genereret HTML-kode (' >' i stedet
for 'ø' osv.) Laver man et HTML-link med navnet, giver det en fejl.
- Hvis man kører rawurleencode() på filnavnet, kan man linke til det
korrekt, selvom det ikke ser pænt ud. Det bliver kodet ligesom Apache
selv koder det med mod_autoindex.
- Hvis man bruger PHP's chdir() til at skifte til et bibliotek med
udvidede tegn i, får man en fejl, fordi de(t) udvidede tegn, som man har
angivet som parameter til funktionen ikke oversættes korrekt.
I Apache's konfiguration er sat
AddDefaultCharset UTF-8
I php.ini er sat
default_charset = "utf-8"
I HTML HEAD-delen af den side, der kalder readdir() er sat
<meta http-equiv="content-type" content="text/html;
charset=UTF-8">
Det hele afvikles på en umodificeret Debian Woody med compilet Apache
2.0.47 og PHP/4.3.4.
Jeg har testet det i IE6 og Mozilla Firebird 0.7.
Jeg kan ikke forestille mig, at jeg er den første der har haft problemer
med dette, men jeg har søgt og søgt efter en løsning, indtil videre uden
held. Jeg har overvejet om mbstrings-udvidelsen til PHP er nødvendig,
men den nævnes kun i forbindelse med asiatiske sprog og tegnsæt.
Nogen, der har en løsning på dette?
Mvh.
Achton N. Netherclift
Reply to: