T&R splet blog o spletnih storitvah. Razgaljamo tehnologijo!

reference spletnih strani
7th September

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):

PHP:
  1. // Settings
  2. header('Content-Type: text/html; charset=utf-8' );
  3. error_reporting(E_ALL | E_STRICT);
  4. $translateToEncoding = 'windows-1250';
  5. $previousEncodings = 'UTF-8';
  6. $fileExtension = '.php';
  7. $newFilesMainFolder = 'converted';
  8.  
  9. // Grab files
  10. $foldersToEncode = array('file_encoding_converter_folder');
  11.  
  12. foreach($foldersToEncode as $folder) {
  13.     $files = getFilesFrom($folder, $fileExtension);
  14.  
  15.     foreach($files as $file) {
  16.         $tempString = file_get_contents($file['path']);
  17.  
  18.         // Check in which encoding is file, convert
  19.         $oldEncoding = mb_detect_encoding($tempString, $previousEncodings);
  20.  
  21.         if ($oldEncoding !== $translateToEncoding) {
  22.             $tempString = iconv($oldEncoding, $translateToEncoding, $tempString); // re-encode
  23.             $newFilePath = str_replace($folder, $newFilesMainFolder, $file['path']); // store file to a new location (we don't want to override previous files)
  24.  
  25.             // Create new file with right encoding
  26.             rmkdir($newFilePath, 0777);
  27.             file_put_contents($newFilePath, $tempString);
  28.             dump('File: '.$file['path'].' successfully converted to: '.$translateToEncoding);
  29.         } else {
  30.             dump('File: '.$file['path'].' already converted to: '.$oldEncoding);
  31.         }
  32.     }
  33. }

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:

Deli s skupnostjo:

  • Print
  • Digg
  • Sphinn
  • del.icio.us
  • Facebook
  • Mixx
  • Google Bookmarks

Podobni članki:

  1. Konverzija CP1250, ISO-8859-1 baze v UTF-8 – šumniki UTF-8 – cp1250 to utf8
  2. AJAX iskanje datotek, dodajanje v seznam ter predogled le teh (PDF, jpeg)
  3. Šumniki – UTF-8 – Težave – PHP & MySQL
  4. Hitri vnos/uvoz podatkov v MySQL preko LOAD DATA INFILE
  5. PHP – izdelava galerije – preprosta skripta za prikazovanje slik
  6. PHP – delo z UTF-8 stringi oz. podatki – težave s šumniki (č,š,ž)
  7. Rezanje teksta po koncu besede – php funkcija – substr – cut text – UTF-8
  8. PHP – kako ugotoviti tip datoteke (get file extension type)
  9. Zend Search Lucene – UTF8 podpora – iconv težave
  10. Stalni UTF-8 problemi – utf8 mysql php – čšž šumniki težave – iskanje znaki – mysql like

5x komentirano na “PHP – Konvertiranje datotek CP1250, UTF-8 – iconv”

  1. smottt je napisal:

    Celotna koda nekako ne deluje.

  2. Roky je napisal:

    Mi lahko prosim poveš kaj točno ne dela, hvala.

  3. smottt je napisal:

    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....

  4. Roky je napisal:

    Ah, smotko jest. Sem popravil, hvala. Če bo pa kaj z kodo narobe pa tudi sporoči:)

  5. Stalni UTF-8 problemi – utf8 mysql php – čšž šumniki težave – iskanje znaki – mysql like | .: TRSplet - internetne storitve :. je napisal:

    [...] Konvertiranje datotek CP1250, UTF-8 – iconv [...]

Dodaj komentar