Autor Zpráva
mila
Profil
Procházím adresář pomocí

$dir = dir($path);
while ($file = $dir->read()) { echo $file}

Zjistil jsem, že mi to vrací jména souborů v kódování win1250. Řekl jsem si, že je to logické, když je to na windows, a nahrál testovací soubor na dva různé hostingy (oba pod linuxem). Výsledek stejný - win1250

Zajímalo by mě, jak php ví, ve kterém kódování má jména souborů vracet. Přoč je to win1250 a ne třeba ISO8859-2 nebo UTF-8?

Obecněji - zjišťuje si php nějak, ve kterém kódování se pracuje? (z php.ini, hlaviček, něco jiného...)


V praxi potřebuji cestu k souboru zakódovat pomocí urlencode do adresy. Zjistil jsem, že je to potřeba v utf8. Tak by mě zajímalo, zda se mohu spolehnout, že pokud před tím převedu cp1250->utf8, že to bude obecně fungovat.
tiso
Profil
Je dobrým zvykom nepoužívať v názvoch adresárov a súborov diakritiku, medzery a veľké písmená... Potom Ti je kódovanie šum a fuk...
Charlie
Profil
PHP pracuje právě v tom kódování, ve kterém je napsané - tzn. když PHP dokument uložíš v UTF-8, bude ti vracet názvy souborů rovněž v UTF-8.
mila
Profil
tiso
Je dobrým zvykom nepoužívať v názvoch adresárov a súborov diakritiku, medzery a veľké písmená... Potom Ti je kódovanie šum a fuk...
Ano, s tím souhlasím. Jde o něco jako obrázkovou galerii, do které si klient přes ftp nahrává obrázky. Nechce se mi mu vysvětlovat, že má všechny obrázky přejmenovat.
Navíc názvu souboru využívám jako popisek obrázku, díky čemuž nemusím dělat vedle nějakou databázi.

Charlie
PHP pracuje právě v tom kódování, ve kterém je napsané - tzn. když PHP dokument uložíš v UTF-8, bude ti vracet názvy souborů rovněž v UTF-8.
To jsem zkoušel, a není tomu tak. Samozřejmě, pokud uložím soubor v utf8, tak i texty z něj jsou v utf8. Neznamená to, že když v něm z venčí získám nějaký text, bude v něm také.
Zkoušel jsem soubor uložit v utf8, jména souborů jsem dostával stále ve win1250. Jak by to také php zjistilo, když v tom souboru typicky ani žádné písmena s diakterikou nejsou (obsah je oddělen od kódu)


Rozšířil jsem svůj test a zkoušel jsem právě pomocí $dir = dir($path); přečíst obsah adresáře, jehož jméno absahovalo diakteriku. Skript (a tedy i název adresáře) musel být uložen v win1250. Win i Linux.


Mimochodem, urlencode a decode je docela zrádná věc. Do teď mi nedošlo, že to musí být v utf8. Neboť jsem si něco zakódoval, pak opět rozkodoval a bylo to v pořádku.
Na problém jsem narazil, až když ty zakódované znaky byly ve jménu souboru. Tam se to teprve projevilo, protože si to přeložil apache, a příslušný soubor nenašel.
djlj
Profil
mila
A co takhle ten název prostě převést z windows-1250 do utf-8? :)
djlj
Profil
http://cz.php.net/manual/cs/function.iconv.php
mila
Profil
djlj
A co takhle ten název prostě převést z windows-1250 do utf-8? :)
Ano, to plánuju udělat. Pravda přijde mi to malinko neelegantní, ale co mi zbývá.
Chěl jsem se přiučit, jestli někdo neví, jak to funguje. Trochu se bojím, aby někde jinde (tzn. až se web pustí na ostro), to nepřestalo fungovat.

Je mi to prostě divné. Proč zrovna win1250? Například vůbec netuším, jak získat název souboru, pokud ho pojmenuji třeba řeckými písmeny (zkoušel jsem, win to zvládnou, v php si to ale nepřečtu)

Neví někdo více o tom, jak funguje v systému diakterika v názvu souborů? Spolupráce systém/apache/php?
Případně nějaký dobrý link. Chci se vzdělávat:)
WertriK
Profil *
Navíc názvu souboru využívám jako popisek obrázku, díky čemuž nemusím dělat vedle nějakou databázi.

Řekl bych, že kdyby jste tu DB použil vyhnete se těmto problémům a jistota dobrého fungování bude určitě větší.
Leo
Profil
Poptejte se na

http://forum.builder.cz/list.php?f=20

Leo
medden
Profil *
Proč zrovna win1250?
Tipujem že preto, lebo klient používa windows a ftp program ktorým to tam nahráva je pracuje v cp1250 (typicky IE), keby to išlo v linuxe, tak najpravdepodobnejšie by to bolo v iso8859-2
bycek76
Profil *
Doporučuju si přečíst PHP a čeština I. - úvod, kódování českých znaků Mějte se a smějte se
matak
Profil
Chtěl bych se zeptat zda už jste tento problém vyřešil??

Potřebuji vypsat jména adresářů a nelze používat nějaké dtb.

Navíc funkce iconv má základní nevýhodu v tom, že je nutné znát vstupní kódování a to znát nebudu, v závislosti na tom zda je soubor uložen ve win nebo linux jak je uvedeno vyše.
krteczek
Profil
matakmaslím že dgx napsal funkci která detekuje podle použitých znaků v jakém kodování je text, jestli je to použitelné i u názvů souborů, toť otázka.
Toto téma je uzamčeno. Odpověď nelze zaslat.