Internet Explorer : ékezetes fájlok letöltése problémás

Fórumok

Sziasztok HUP népe!

Téma: php -vel generált fájlok kiszolgálása. (weblaboron van egy jó kis cikk a témáról) Szeretnék generálni kisebb-nagyobb (de max. pár KByte) méretű fájlokat php -vel és ezeket a generált fájlokat letöltésre odaadni felhasználónak.

Konkrétabban: pl. pdf fájlt létrehozni MySQL -ből vett tartalommal és ha már a tartalmat onnan szedem, akkor a fájlnév is onnan jön, mondjuk egy webshop megrendelési bizonylata készül így, amiben benne van a megrendelt termék leírása és a felhasználó adatai, a fájlnév pedig a termék_neve.pdf. A gond ott kezdődik, ha a termék nevében ékezetes karakter van, akkor a generált fájlt az IE kriksz-kraksz néven menti. Pl. ha űáéűéűáőúő.pdf a generált név, akkor így jön létre a fájl IE -vel mentve: űáéűéűáőúő.pdf. Firefox, Opera és Google Chrome böngészők egytől egyig hibátlanul, ékezetesen le tudják menteni, viszont az IE 6, 7 és 8 sem tudja ezt kezelni.

A php lehetőséget ad az ékezetes karakterek átkonvertálására több módon is, próbálkoztam azzal, hogy html entity konverzión átküldöm a fájlnevet és úgy kínálom letöltésre. Így már FF, Opera és Chrome esetén sem lesz szép az eredmény, mert karakterenként lementi a html entity -vel teletűzdelt fájlnevet (tele & és hasonló dolgokkal), de az IE -nek ez sem tetszik, az első ; után megszakítja a fájlnév értelmezését és pl. &amp (; nélkül) néven, kiterjesztés nélkül kínálja letöltésre, így a gyakorlatlan felhasználó nem tudja, mit kezdjen vele (pl. nevezze át valami.pdf -re).

Egyébként a kérdéses weblap full utf-8 ,,compliant'', a php állományok utf-8 kódolásban vannak elmentve, a MySQL adatbázis utf-8 kódolású (minden tábla és mező is, a tartalmuk is), a php.ini -ben is utf-8 a default_charset értéke. Működik is szépen (nincs gond semmilyen utf-8 karakter megjelenítésével magán a weblapon), ahogy írtam, kivéve ha IE -vel akarnak generált fájlt letölteni a népek. Pedig sajnos akarnak.

Tudom, van lehetőség string vizsgálatára és tetszőleges karakterek cseréjére (ékezetest az ékezet nélküli ,,párjára''), de könyörgöm, 2010 -ben tényleg nincs más lehetőség? Ennyire bullshit az IE? (utóbbi kérdésre válasz: igen) Sikerült valakinek megoldani valahogy hasonló problémát? Olyan megoldás érdekelne, ami ahhoz vezet el, hogy a felhasználó megkapja a .pdf -ét szépen, rendesen, ékezetes karakterekkel (de nem e-mailben elküldve, hanem on-demand módon)

Próbáltam guglizni releváns kifejezésekre, de nem találtam semmit. Gondolom az angolszász népeket mivel nem érinti a dolog, nem is érdekli őket. A többi nép meg nem angolul tárgyalja meg az ilyen jellegű problémáit.

Tud valaki segíteni? Köszönöm előre is!

Hozzászólások

> Pl. ha űáéűéűáőúő.pdf a generált név, akkor

Ha jól tudom, akkor az URL-ben: %C5%B1%C3%A1%C3%A9%C5%B1%C3%A9%C5%B1%C3%A1%C5%91%C3%BA%C5%91.pdf -nek kéne állni.

Az is lehet, hogy a .pdf header-je miatt rossz a fájlnév(?), akkor valami ilyesmi segíthet:

Content-Disposition: attachment; filename="=?UTF-8?B?JiMzNjk74ekmIzM2OTvpJiMzNjk74SYjMzM3O/omIzMzNzs=?=.pdf"

Úgy jön létre a fájl, hogy
1) php -van kiküldöm a header -t (benne a mime-type, és az utf-8 karakterkódolás)
2) egy következő header utasítással kiküldöm a fájl nevét: header('Content-Disposition: attachment; filename="űáéűéűáőúő.pdf');
2) összefűzöm a leendő pdf tartalmát egy változóba
3) printelem a változó tartalmát

URL igazából nincs külön hozzárendelve, csak mondjuk a megrendelési folyamat végén egy ,,megrendel.php'' kap POST formátumban egy azonosítót (pl. $_POST['azonosito'] = '132'), ami alapján a MySQL -ből kiolvassa a termék adatait.

Így el is készül a fájl és csak az IE -nek okoz gondot a neve. :(

> Így el is készül a fájl és csak az IE -nek okoz gondot a neve. :(

Most találtam: https://connect.microsoft.com/IE/feedback/details/411118/no-support-for…

Bejelentés:

IE lacks support for utf-8 encoded characters in the Content-Disposition filename header. This means that there's no way to have international filenames using the Content-Disposition http header. This is a big issue for non english speaking languages, making it impossible to use international file names on serverside generated files. This works fine in Fire Fox web browser.

Válasz:

Thank you for this feedback.

At this time we do not plan on fixing this issue in the IE8 time frame. We appreciate the report, but unfortunately we are at a stage where need to choose what we work on to maximize the value for customers and web developers.

We will track the issue and hope to address it in a future version of IE.

Best Regards,

The IE Team

Workaround:

You can HttpEncode the filename:
C#: HttpUtility.UrlEncode("My norwegian filename æøå")

Szerintem egy filenév alapban ne tartalmazzon ékezetet. Én simán "ékezetlínetém".
_______________
www.netrally.hu

,,ékezetlínetém'' :)
Útelgáz.. nehéz szó ;))

Na, de most komolyra fordítva: értem én, hogy jó az ékezetmentesség, mert az a biztos (régen, még Win98 időkben de sokat is lehetett szívni velük, meg a hosszú fájlnevekkel), de azért már tényleg 2010 van és csak jó lenne, ha ékezetes formátumba (is) lehetne lementeni a fájlt.