Kirjautuminen

Haku

Tehtävät

Keskustelu: Koodit: PHP: UTF-8 -enkoodaaja

Blaze [06.03.2005 17:34:37]

#

Tulipahan tällaiselle tarvetta, niin ajattelin laittaa jakoon.

Muuttaa siis tiedostojen merkkikoodauksen ISO-8859-1:stä UTF-8:ksi. Huomattava on, että tämä rikkoo niin binääritiedostot, kuin jo valmiiksi UTF-8:aa olevat tiedostot. Aja siis vain kerran.

Käytetään komentoriviltä (toki voi muokata veppiserverikäyttöön), ja toimii testatusti ainakin find -komennolta pipetettäessä.

P.S. UTF-8 -dekoodaajaskriptin tästä saa yhtä riviä muuttamalla.

utf8e.php

<?php
/*
   ISO-8859-1 -> UTF-8 -enkoodajaskripti.
   2005 Karri "Blaze" Kahelin, http://pp.kpnet.fi/blaze/
   Muokkaa, levitä ja hyödynnä vapaasti.

   Käyttö esim.: php utf8e.php tiedosto1 tiedosto2
            tai: find alihakemisto | php utf8e.php
*/
if($argc >= 2) { // tiedostot annettu komentorivillä
    for($i = 1; $i < $argc; $i++) {
        enkoodaa($argv[$i]);
    }
} else { // luetaan stdinistä
    $puskuri = '';
    // luetaan stdinistä niin kauan, kun siellä on jotain
    while(!feof(STDIN)) {
       $puskuri .= fgets(STDIN, 4096);
    }
    // erotellaan rivit taulukoksi
    $filut = explode("\n", $puskuri);
    // enkoodataan yksi kerrallaan
    foreach($filut as $filu) {
        if($filu != '') {
            enkoodaa($filu);
        }
    }
}

function enkoodaa($filu) {
    // rivinvaihto lopusta pois
    $filu = trim($filu);
    echo 'Processing: ' . $filu . "\n";
    // luetaan tiedosto
    $teksti = @file_get_contents($filu);
    if($teksti === false) { // ei onnistunut, todennäköisesti hakemisto
        echo "Error: Can't open file: $filu\n";
    } else {
        // kirjoitetaan enkoodattu versio takaisin samaan tiedostoon
        $hanska = fopen($filu, 'w');
        fwrite($hanska, utf8_encode($teksti));
        fclose($hanska);
    }
}
?>

Gwaur [10.09.2005 13:26:55]

#

Minun mielestäni saisit kuvauksen jälkikirjoituksen lisäksi myös kertoa sen, että mitä riviä pitäisi muuttaa ja millaiseksi. Itse taisin löytää, mutta joku muu ei ehkä löydä ;)

progo [16.09.2006 18:55:13]

#

Vaikka iconv on olemassa niin tämä on ihan hyödyllinen työkaluna, kunhan sopivasti editoi vähän.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta