Bonjour à tous,

Pour nettoyer des noms de fichiers avant un upload, j'utilise une fonction de nettoyage standard :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
 
function nettoie($str, $charset='utf-8')
{
$str = htmlentities($str, ENT_NOQUOTES, $charset);
$str = preg_replace('#\&([A-za-z])(?:acute|cedil|circ|grave|ring|tilde|uml)\;#', '\1', $str);
$str = preg_replace('#\&([A-za-z]{2})(?:lig)\;#', '\1', $str); 
$str = preg_replace('#\&[^;]+\;#', '', $str);  
return $str;
}
Elle fonctionne très bien lors d'un upload classique et :
chaîne_dégueu.zip devient bien chaine_degueu.zip

Idem si je teste à l'affichage.
Mais si je veux utiliser la fonction rename pour un fichier qui est déjà sur le serveur, ça ne fonctionne plus :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 
$avant = "chaîne_dégueu.zip";
$apres = nettoie($avant);
rename($avant, $apres);
Quelqu'un sait pourquoi ? J'ai pourtant ajouté un encodage UTF-8...