Locale názvů souborů na serveru a práce s nimi
- na1k
- Člen | 288
Při psaní jednoduchého prohlížeče soubrů jsem narazil na problém. Windows (localhost) a Linux (ostrý server) používá pro názvy souborů různé kódování. Zatímco Win má zřejmě cp1250, Linux vypadá na utf8, a to mi způsobuje dost velkou nekonzistenci při práci se soubory (samozřejmě hledám univerzální řešení).
Řeší toto Nette nějak? Řešíte to nějak vy? Je v Nette nějaká možnost zjistit jestli jsem na Linuxu nebo ideálnějc která znaková sada se pro filesystém používá?
Vrtá mi to hlavou, protože jsou tu dokonce už i komponenty pro práci se soubory, ale nikde jsem nenašel nic, co by mě alespoň popostrčilo dál. To dělám nějakou začátečnickou chybu a jsem jediný, kdo tohle řeší?
- jakubkulhan
- Člen | 55
na1k napsal(a):
Je v Nette nějaká možnost zjistit jestli jsem na Linuxu nebo ideálnějc která znaková sada se pro filesystém používá?
OS jde zjistit pomocí konstanty PHP_OS (viz předdefinované konstanty). UNIXovým filesystémům je úplně jedno, v jaké znakové sadě je název souboru – pro ně je to všecko Céčkovský řetězec (posloupnost bytů ukončená NULovým).
- na1k
- Člen | 288
Myslím, že tady máš pravdu jen zpola – utf je multibyte (jeden znak = více bytů) a pokud s ním chceš pracovat v Céčku, je potřeba vědět, že jde právě o utf.
Na druhou stranu díky za postrčení alespoň k té konstantě. Moc se mi to řešení nelíbí, ale asi nebudu mít na výběr a budu to muset rozlišovat podle OS.
Stejně by mě ale zajímalo, jak to řeší ostatní – používáte snad Linux i pro vývojové prostředí?
- jakubkulhan
- Člen | 55
na1k napsal(a):
Myslím, že tady máš pravdu jen zpola – utf je multibyte (jeden znak = více bytů) a pokud s ním chceš pracovat v Céčku, je potřeba vědět, že jde právě o utf.
Proto jsem psal posloupnost bytů, ne znaků – o znaky filesystému vůbec nejde. Psal jsem UNIXové filesystémy – u takové FATky, nebo NTFS je to něco jiného, protože ty potřebují provádět case-insensitive porovnávání.