diff --git a/services/wiki/wiki_path.go b/services/wiki/wiki_path.go index 4961cdb75c..9054127f44 100644 --- a/services/wiki/wiki_path.go +++ b/services/wiki/wiki_path.go @@ -150,16 +150,18 @@ func WebPathFromRequest(s string) WebPath { } var multiHyphenRe = regexp.MustCompile(`-{2,}`) -var nonAlphanumRe = regexp.MustCompile(`[^a-zA-Z0-9\-]`) +var nonSlugRe = regexp.MustCompile(`[^a-zA-Z0-9+.\-]`) // sanitizeWikiTitle converts a user-provided title into a clean, URL-friendly slug. // Spaces and special characters become hyphens, consecutive hyphens collapse to one. +// Preserves: letters, digits, hyphens, plus signs (+), and dots (.) func sanitizeWikiTitle(title string) string { title = strings.TrimSpace(title) title = strings.ReplaceAll(title, " ", "-") - title = nonAlphanumRe.ReplaceAllString(title, "-") + title = nonSlugRe.ReplaceAllString(title, "-") title = multiHyphenRe.ReplaceAllString(title, "-") - title = strings.Trim(title, "-") + title = strings.NewReplacer("-+-", "-", "+-", "-", "-+", "-").Replace(title) // clean stray plus signs + title = strings.Trim(title, "-+.") return title }