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);
}
}
?>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ä ;)
Vaikka iconv on olemassa niin tämä on ihan hyödyllinen työkaluna, kunhan sopivasti editoi vähän.
Aihe on jo aika vanha, joten et voi enää vastata siihen.