156 votes

désinfectant de chaîne pour nom de fichier

Je recherche une fonction php qui désinfectera une chaîne et la rendra prête à être utilisée pour un nom de fichier. Quelqu'un en connaît un à portée de main ?

( Je pourrais en écrire un, mais j'ai peur d'oublier un personnage ! )

Modifier : pour enregistrer des fichiers sur un système de fichiers NTFS Windows.

185voto

Sean Vieira Points 47080

En apportant un petit ajustement à la solution de Tor Valamo pour résoudre le problème remarqué par Dominic Rodger, vous pourriez utiliser :

// Remove anything which isn't a word, whitespace, number
// or any of the following caracters -_~,;[]().
// If you don't need to handle multi-byte characters
// you can use preg_replace rather than mb_ereg_replace
// Thanks @Łukasz Rysiak!
$file = mb_ereg_replace("([^\w\s\d\-_~,;\[\]\(\).])", '', $file);
// Remove any runs of periods (thanks falstro!)
$file = mb_ereg_replace("([\.]{2,})", '', $file);

41voto

Dominic Rodger Points 44489

Au lieu de se soucier d'ignorer les personnages, que diriez-vous d'utiliser une liste blanche de personnages que vous êtes heureux d'utiliser ? Par exemple, vous pouvez autoriser juste bon ol 'a-z, 0-9, _, et une seule instance d'une période (.). C'est évidemment plus limitatif que la plupart des systèmes de fichiers, mais cela devrait vous protéger.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X