From d609b8db8c0aa2eafd177ca18bfe8e1d4f34e1db Mon Sep 17 00:00:00 2001 From: Jonathan Miller Date: Tue, 26 May 2026 13:47:59 -0500 Subject: [PATCH] fix: preserve + and . in wiki slugs, clean stray plus signs Allow C++, .NET, version numbers (2.0.1) in wiki filenames. Clean up isolated plus signs that appear between hyphens. Examples: - C++ vs C# -> C++-vs-C.md - .NET Guide -> .NET-Guide.md - version 2.0.1 -> version-2.0.1-release.md Co-Authored-By: Claude Opus 4.6 (1M context) --- services/wiki/wiki_path.go | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) 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 } -- 2.52.0