package pdf import ( "regexp" "strings" "unicode" "golang.org/x/text/unicode/norm" ) // SanitizeFilename transforme une chaîne Unicode en nom de fichier sûr : // - supprime les accents (Clément → Clement) // - remplace les espaces par des tirets // - supprime les caractères interdits (Windows / Unix) // - évite les noms vides func SanitizeFilename(input string) string { if input == "" { return "inconnu" } // 1) Normalisation Unicode (NFD) pour séparer lettres + accents t := norm.NFD.String(input) // 2) Suppression des marques diacritiques (accents) sb := strings.Builder{} for _, r := range t { if unicode.Is(unicode.Mn, r) { continue } sb.WriteRune(r) } out := sb.String() // 3) Remplacements simples out = strings.ReplaceAll(out, " ", "-") out = strings.ReplaceAll(out, "_", "-") // 4) Suppression des caractères interdits dans les noms de fichiers // Windows + Unix re := regexp.MustCompile(`[<>:"/\\|?*\x00-\x1F]`) out = re.ReplaceAllString(out, "") // 5) Nettoyage final out = strings.Trim(out, "-.") if out == "" { return "inconnu" } return out }