Voici quelques exemples de noms de fichiers :
.jpg (Chinese)
.jpg (Russian)
AbÇöiÜ.jpg (Turkish, ISO-8859-9)
...
J'ai essayé rawurlencode(mb_convert_encoding($file, "UTF-8", mb_detect_encoding($file)))
mais cela ne fonctionne pas, tous les caractères chinois et russes s'impriment comme %3F (point d'interrogation ordinaire) et tous les caractères turcs sont supprimés.
Je teste sous Windows, avec PHP 5.3.
La seule solution que j'ai trouvée est d'entrer l'encodage explicitement : rawurlencode(mb_convert_encoding($file, "UTF-8", "ISO-8859-9"))
Cela ne fonctionne que pour les caractères turcs.
Au fait, mb_detect_encoding($file)
renvoie toujours "UTF-8" pour les fichiers ci-dessus.
EDIT :
Après avoir exécuté le code suivant, je pense que mb_convert_encoding()
ne peut pas résoudre mon problème :
$iterator = new RecursiveIteratorIterator(new RecursiveDirectoryIterator("mp", FilesystemIterator::UNIX_PATHS));
$iterator = new RegexIterator($iterator, '/^.+\.(gif|jpg|jpeg|png)$/i', RegexIterator::GET_MATCH);
foreach ($iterator as $file)
{
foreach (mb_list_encodings() as $encoding)
var_dump(rawurlencode(mb_convert_encoding($file[0], "UTF-8", $encoding)) . " : " . $encoding);
}
Je suppose que c'est une question d'encodage, mais je ne sais pas comment faire.