PHP – Konvertiranje datotek CP1250, UTF-8 – iconv
Po dolgem času nova objava z moje strani. Ja, dodatno delo, lovljenje pogoja na faksu in podobno te izčrpa, zato je bilo potrebno malce zmanjšati čas, ki ga posvečam drugim stvarem in tako je nastradal tudi blog, je bil pa zato Antony toliko bolj dejaven. Priznam, tudi malce pavze vedno paše. Med tem časom se je nabralo kar nekaj snovi, ki bo predstavljena tekom sledeča meseca oz. dva.
Začnimo s preprosto skripto, ki skrbi, da določen imenik - direktorij, ki vsebuje poljubno n število datotek pregledamo, ugotovimo v kakšnem charsetu oz. encodingu so zapisane najdene datoteke, nato pa jih s pomočjo PHP iconv funkcije konvertiramo v nam želeni charset oz. kodno tabelo.
PHP koda (funkcije so izvzete):
-
// Settings
-
$translateToEncoding = 'windows-1250';
-
$previousEncodings = 'UTF-8';
-
$fileExtension = '.php';
-
$newFilesMainFolder = 'converted';
-
-
// Grab files
-
-
foreach($foldersToEncode as $folder) {
-
$files = getFilesFrom($folder, $fileExtension);
-
-
foreach($files as $file) {
-
-
// Check in which encoding is file, convert
-
-
if ($oldEncoding !== $translateToEncoding) {
-
$newFilePath = str_replace($folder, $newFilesMainFolder, $file['path']); // store file to a new location (we don't want to override previous files)
-
-
// Create new file with right encoding
-
rmkdir($newFilePath, 0777);
-
file_put_contents($newFilePath, $tempString);
-
dump('File: '.$file['path'].' successfully converted to: '.$translateToEncoding);
-
} else {
-
dump('File: '.$file['path'].' already converted to: '.$oldEncoding);
-
}
-
}
-
}
V nastavitvah nastavimo v kakšen encoding želimo konvertirati, v kakšni kodni tabeli so bile datoteke zapisane prej in kam na novo pre-konvertirane datoteke shranimo. Določimo tudi kakšne tipe datotek želimo konvertirati (v našem primeru php datoteke). Zakaj kreiramo nov imenik za pre-konvertirane datoteke (imenik converted v našem primeru)? Iz preprostega razloga, zato ker ne želimo prepisovati starih datotek. Kot je iz kode razvidno lahko konvertiramo več direktorijev saj je $foldersToEncode spremenljivka tipa Array.
Naj na hitro obrazložim še funkcije, ki so uporabljene v sledeči skripti. Dump skrbi za lep izpis podatkov, getFilesFrom pridobi vse datoteke določena tipa iz poljubnega direktorija, rmkdir pa rekurzivno kreira željeni direktorij.
Dodatne informacije:
- Celotna koda (vključene vse potrebne funkcije za delovanje skripte)
- Podobna rešitev konvertiranja datotek iz UTF8 to ASCII
- Več o PHP iconv funkcijah
- Več o Multibyte String funkcijah
Podobni članki:
- Konverzija CP1250, ISO-8859-1 baze v UTF-8 – šumniki UTF-8 – cp1250 to utf8
- AJAX iskanje datotek, dodajanje v seznam ter predogled le teh (PDF, jpeg)
- Šumniki – UTF-8 – Težave – PHP & MySQL
- Hitri vnos/uvoz podatkov v MySQL preko LOAD DATA INFILE
- PHP – izdelava galerije – preprosta skripta za prikazovanje slik
- PHP – delo z UTF-8 stringi oz. podatki – težave s šumniki (č,š,ž)
- Rezanje teksta po koncu besede – php funkcija – substr – cut text – UTF-8
- PHP – kako ugotoviti tip datoteke (get file extension type)
- Zend Search Lucene – UTF8 podpora – iconv težave
- Stalni UTF-8 problemi – utf8 mysql php – čšž šumniki težave – iskanje znaki – mysql like



September 8th, 2008 ob 5:10 pm
Celotna koda nekako ne deluje.
September 8th, 2008 ob 5:44 pm
Mi lahko prosim poveš kaj točno ne dela, hvala.
September 9th, 2008 ob 8:51 pm
Oprosti, napačno sem se izrazil. Povezava do celotne kode ne deluje
Warning: opendir(file_encoding_converter_folder) [function.opendir]: failed to open dir: No such file or directory in....
September 10th, 2008 ob 8:29 am
Ah, smotko jest. Sem popravil, hvala. Če bo pa kaj z kodo narobe pa tudi sporoči:)
August 21st, 2009 ob 4:07 pm
[...] Konvertiranje datotek CP1250, UTF-8 – iconv [...]