Ben PHP için kesin konuşamam, ama Python 2 ile aynı temel sorun sanıyorum (daha önce daha sonra Unicode dize dosya için özel destek ekleyerek) vardı.
Benim inancım PHP open'-et-al bayt-tabanlı işlevler, standart C kütüphanesi 'kullanarak dosya ile ilgili olmasıdır. Windows (NT) bu sistemin kod sayfasını kullanarak gerçek Unicode dosya kodlamak için deneyin. Batılı makineleri (ISO-8859-1 benzeri) cp1252, ya da Japon makinelerde (-Shift JIS benzer) CP932'den olabilir. Sistem kod sayfasında mevcut olmayan herhangi bir karakter için, '?' Karakterini bir alacak, ve bu dosyaya başvurmak mümkün olacak.
Bu sorunu aşmanın PHP Python 3.0 olarak aynı yapmak ve Windows altında dosya için yerel Unicode erişmek için '_wopen'-et-al işlevleri kullanarak, dosya adları (ve her şey) için Unicode dizeleri kullanmaya başlamak gerekir. Ben bu PHP6 ne olacağını bekliyoruz, ama şu an için muhtemelen oldukça fazla dolması demektir. Sen dosya erişmek için CP932'den için sistem kod sayfasını değiştirmek olabilir, ama yine de olsun istiyorum '?' Eğer gerçekten don't istemiyorum Shift-JIS, ve her durumda herhangi başka bir Unicode karakter karakterler uygulamanızın iç dizeler yapmak için tüm Shift-JIS oldukça korkunç bir kodlama olduğu gibi.
Bu dosyaları saklamak için nasıl seçerek kendi komut varsa, ben kuvvetle yolu parçaları firar / yeniden yazar kullanarak, yerel '4356 gibi basit birincil anahtar tabanlı dosya adlarını 'kullanarak bir veritabanında gerçek dosya adını koyarak ve dosyaları hizmet öneririm URL. Kendi yerel dosya kullanıcı tarafından sağlanan dosya adlarını tutulması bile Unicode hakkında endişelenmenize gerek kalmadan zor ve güvenlik afetler için bir reçetedir.