Voici un script PHP permettant la conversion de l’encodage des fichiers vers UTF-8. Il exporte un projet du référentiel SVN dans un dossier, et place les fichiers convertis dans un dossier avec un suffixe “.utf8”.

#!/usr/bin/php
function recursive_readdir ($dir)
{
  global $dir_in, $dir_out;
  $dir = rtrim ($dir, '/');
  if (is_dir ($dir)){
    $dh = opendir ($dir);
  } else {
    echo $dir, ' n\'est pas un repertoire valide';
    exit;
  }
  while (($file = readdir ($dh)) !== false) {
    if ($file !== '.' && $file !== '..') {
      $path =$dir.'/'.$file;
      $path_out = str_replace($dir_in, $dir_out, $path);
      if (is_dir ($path)) {
        if (!file_exists($path_out)) mkdir($path_out);
        recursive_readdir ($path);
      }
      else {
        $encoding = exec("file -b --mime-encoding $path");
        if($encoding=='iso-8859-1') {
          $cmd = "iconv -o $path_out -f ISO8859-1 -t UTF-8 $path";
        }
        elseif($encoding=='us-ascii') {
          $cmd = "iconv -o $path_out -f US-ASCII -t UTF-8 $path";
        } else {
          $cmd = "cp $path $path_out";
        }
        echo $cmd, "\n";
        passthru($cmd);
      }
    }
  }
  closedir ($dh);
}

// => Début du programme
$dir_in = '/home/chemin/vers/dossier';
$dir_out = '/home/chemin/vers/dossier.utf8';
exec("svn export file:///svn/projet/trunk $dir_in/");
if (!file_exists($dir_in)) {
  exit;
}
if (!file_exists($dir_out)) {
  mkdir($dir_out);
}
recursive_readdir($dir_in);