Files
paycheck/internal/pdf/sanitize.go

51 lines
1.1 KiB
Go

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
}