« rapport (final) v2 – copie.pdf » : un visiteur qui dépose ce fichier via un formulaire ne devrait jamais voir ce nom transféré tel quel vers le système de fichiers du serveur. Parenthèses, espaces multiples, apostrophes ou caractères accentués peuvent provoquer des comportements imprévisibles selon le système de fichiers, voire ouvrir la porte à des manipulations plus problématiques sur certaines configurations serveur mal isolées.
sanitize_file_name() est la fonction native prévue pour ce nettoyage. Elle ne doit jamais être sautée sous prétexte que « le nom semble propre » : c’est justement dans les cas les moins évidents qu’un caractère invisible ou un encodage inattendu cause le plus de dégâts.
Ce que fait la fonction concrètement
Elle retire les caractères considérés comme spéciaux pour un système de fichiers (?, [, ], /, \, =, <, >, :, ;, ,, guillemets et quelques autres), remplace les espaces par des tirets, et translittère certains caractères accentués vers leur équivalent non accentué via remove_accents(), appelée en interne.

$nom_propre = sanitize_file_name( "rapport (final) v2 - copie.pdf" );
// rapport-final-v2-copie.pdf
$nom_propre_2 = sanitize_file_name( "reçu été 2021.pdf" );
// recu-ete-2021.pdf
Où l’utiliser dans un import de documents
Sur un formulaire d’import de documents géré manuellement, hors du gestionnaire de médias standard, le nom d’origine du fichier doit systématiquement passer par cette fonction avant tout appel à move_uploaded_file() ou équivalent :
$nom_original = $_FILES['document']['name'];
$nom_final = sanitize_file_name( $nom_original );
$destination = trailingslashit( $dossier_upload ) . $nom_final;
move_uploaded_file( $_FILES['document']['tmp_name'], $destination );
Un filtre pour des règles supplémentaires
Le filtre sanitize_file_name_chars permet d’ajouter des caractères à la liste de ceux systématiquement retirés, utile si un projet impose des conventions de nommage plus strictes que le comportement par défaut.
- Le filtre reçoit un tableau des caractères actuellement remplacés, et doit retourner le tableau modifié.
- Il s’applique globalement à tous les appels de
sanitize_file_name()sur le site, y compris ceux du cœur de WordPress. - Un usage prudent consiste à ajouter des caractères plutôt qu’en retirer, pour ne pas réintroduire un risque déjà écarté par le comportement natif.
Ce que cette fonction ne fait pas
Nettoyer le nom d’un fichier ne garantit rien sur son contenu réel. La vérification du type de fichier, via wp_check_filetype() ou wp_check_filetype_and_ext(), reste une étape séparée et tout aussi indispensable : un fichier renommé en .jpg peut très bien contenir tout autre chose que des données d’image valides.
Un principe à garder en tête sur tout import de fichier : jamais confiance dans le nom fourni par le visiteur, ni dans l’extension déclarée. Le nettoyage du nom et la vérification du contenu sont deux étapes distinctes, l’une n’excuse jamais l’absence de l’autre.
En résumé
sanitize_file_name() traite un problème précis — la forme du nom de fichier — et le traite bien, en s’appuyant sur une liste de caractères éprouvée et un filtre extensible. Elle ne remplace en aucun cas une vérification de type de fichier, qui reste une étape distincte à ne jamais omettre sur un import ouvert aux visiteurs du site.