Diakritika a kódování názvu souboru při práci v PHP

Používat diakritiku a rozdílná kódování v názvu souborů není moudré.


Ukázky k nahlédnutí kodovani-souboru.php.

Pracoval jsem dlouhou dobu na projektu, který už má něco za sebou. Funguje asi 10 let a za tu dobu měnil platformy, verze php, začal se vyvíjet ještě v PHP3, verze apache, různá nastavení systému, verze linuxu, různé verze kódování stránek, několikrát změna kódování databáze atd.

Výsledkem bylo to, že se nashromáždilo pár giga obrázků a samozřejmě s diakritikou v názvu a ještě s různými kódováními. Obrázky byli uloženy v kódování iso-8859-1, windows-1250 nebo utf-8.

Doteď  mi není jasné jak pracovat se soubory s diakritikou v názvu prostřednictvím php, například pomocí ftp někdo nahraje obrázek z windows, někdo pomocí formuláře zadá háčky a čárky do názvu ukládaného obrázku nebo jednoduše stačí mít stránky v utf-8 kódování a pomocí formuláře nahrát na server soubor s diakritikou.

Problém nastává, když chcete k těmto souborům následně přistupovat. Např. pomocí ajaxu načíst skript, který má vytvořit náhled a zobrazit ho nebo pomocí odkazu na obrázek, který by se měl otevřít v novém okně. Jde o to, že nikdy nevíte v jakém kódování je soubor na serveru uložený a proto ani použití iconv nebude moc platné.

Celý článek má být varováním. Nepoužívejte diakritiku v názvu souborů, nahrávaných na server!

Pokud má někdo kladné zkušenosti nebo mi něco uniklo, nechť se podělí o svůj názor.

Příklad ukazuje o čem mluvím, ale asi je to v celku jasné. Já tento problém řeším tím, že před uložením souboru změním jeho název pomocí funkce na generování cool url adres a tím se zbavím diakritiky a všech dalších škodlivých znaků co nenajdete v ascii.