Cache fájlok létrehozása UTF-8 esetén
Sziasztok,
A teljes rendszerem UTF-8 kódolásra lett átállítva, így az összes működő fájlt ilyen módon létrehozott fájlokkal cseréltem le.
Problémám van a PHP-ből létrehozott cache fájlok kódolásának beállításával. Ezek (gondolom) a szerver által meghatározott ISO-8859-1 kódolással jönnek létre.
Konkrétan többféle RSS tartalmat tárolok, amik vegyesen ISO és UTF betűkészlettel érkeznek. Hogy milyen RSS-eket, az admin felületről adható meg, utána a cache fájl automatikusan jön létre. Az oldalon a kiolvasott tartalmak egyes esetekben hibás betűkkel jelennek meg.
Ha beíráskor minden tartalmat módosítok az mb_convert_encoding() -al UTF-8 ra, akkor kiolvasáskor hibásan jelenik meg (mert maga a cache fájl nem UTF-re lett létrehozva). Ha csak kiolvasáskor módosítok, akkor jónak tűnik, de biztos van jobb megoldás - eleve a létrehozott fájl karakterkódolását megadni. Abba aztán mindent UTF-8 -al lehetne belementeni.
Arra viszont nem ismerek lehetőséget, amivel a touch() után a létrehozott fájl kar.kódolását be tudnám állítani. Van ilyen lehetőség, vagy hogyan szokás ezt megoldani? Esetleg buherálni kell, nincs más megoldás?
Köszi előre is.
■ A teljes rendszerem UTF-8 kódolásra lett átállítva, így az összes működő fájlt ilyen módon létrehozott fájlokkal cseréltem le.
Problémám van a PHP-ből létrehozott cache fájlok kódolásának beállításával. Ezek (gondolom) a szerver által meghatározott ISO-8859-1 kódolással jönnek létre.
Konkrétan többféle RSS tartalmat tárolok, amik vegyesen ISO és UTF betűkészlettel érkeznek. Hogy milyen RSS-eket, az admin felületről adható meg, utána a cache fájl automatikusan jön létre. Az oldalon a kiolvasott tartalmak egyes esetekben hibás betűkkel jelennek meg.
Ha beíráskor minden tartalmat módosítok az mb_convert_encoding() -al UTF-8 ra, akkor kiolvasáskor hibásan jelenik meg (mert maga a cache fájl nem UTF-re lett létrehozva). Ha csak kiolvasáskor módosítok, akkor jónak tűnik, de biztos van jobb megoldás - eleve a létrehozott fájl karakterkódolását megadni. Abba aztán mindent UTF-8 -al lehetne belementeni.
Arra viszont nem ismerek lehetőséget, amivel a touch() után a létrehozott fájl kar.kódolását be tudnám állítani. Van ilyen lehetőség, vagy hogyan szokás ezt megoldani? Esetleg buherálni kell, nincs más megoldás?
Köszi előre is.
Bináris
touch() és charset
A kérdés, hogy ha a PHP touch() fv-el hozok létre egy fájlt, hol tudom megadni, hogy az utf8 formában tárolja a tartalmát?
Az editoromban is be lehet állítani, hogy kogyan mentse el az új fájlokat, ez most utf8 -ra van állítva (amíg az átálláskor minden létező fájlt nem cseréltem ki újra, addig egy csomó krix-krax volt az oldalon). Tehát a szöveges fájlok létrehozásukkor megjegyzik, hogy milyen kódolási beállítással jöttek létre. Nyilván a szerveren PHP-val létrehozott fájlok is megjegyeznek ilyen beállítást - és gondolom, ez a nyilván a defaultnak tekintett ISO-8859-1. Na ezt akarom én létrehozáskor futásidőben módosítani.
Hozzáteszem, hogy a fájlkezelésnek ez a része nem egészen tiszta bennem - azért is kérdezek.
Amit eddig tapasztaltam, hogy ha előre kézzel létrehozom a cache fájlt és beleírom az utf8 kódolású szöveget, akkor más lesz az eredmény, mint ha a PHP hozza azt létre. Nekem pedig PHP-val kellene megoldani a fájl létrehozást is.
Sehol
Egyébiránt kicsit kifejthetnéd, mennyiben más a probléma és hogy hol akadtál el a probléma megoldásában (ami egyébként nem is egészen tiszta számomra).
mb_string win/linux-nál másképp működik
- lekérem a távoli fájlt (rss vagy html), beolvasom egy változóba
- mb_convert_encoding() -al átalakítom utf8-ra a bejövő tartalmat,
- mintát illesztek rá és tömbbe szedem a szükséges dolgokat: blokk címe, szövege, tovább-link,
- a tömböt tetszés szerint beírom a cache fájlba.
Később kiolvasásnál már utf8-as tartalmat kell találnom a cache fájlban.
A problémát valószínű az okozta, hogy az itthoni win* gépen hoztam össze és próbálgattam a PHP dolgot, a karakterkódolás átalakítók viszont (mb_string, iconv) nem ugyanúgy működnek win és linux OS alatt. Amikor feltettem a tárhelyre, egyből megjavult :-)
Közben jutott eszembe, hogy a sortörést valóban másképp kezeli a win és unix OS (\r\n ill. \n), valószínű ezt lehet az editorban állítani. Vagy ki tudja oo)
Editor...
Editplus
Editplus -t használok régóta, részemről meg vagyok elégedve vele. UTF8-at ez is tud. (egyébként nekem új fogalom: a BOM mi fán terem?)
Google?