package utils import ( "errors" "strings" "unicode/utf8" ) var ( ErrInvalidMessageEncoding = errors.New("متن پیام معتبر نیست (کدگذاری اشتباه)") ErrMessageEmpty = errors.New("متن پیام نمی‌تواند خالی باشد") ErrMessageTooLong = errors.New("متن پیام بیش از حد مجاز طولانی است") ) const MaxMessageLength = 2000 // SanitizeMessageText متن یک پیام چت رو قبل از ذخیره‌سازی پاک‌سازی/اعتبارسنجی می‌کنه: // - رد کردن رشته‌هایی که UTF-8 معتبر نیستن (بایت خراب/دستکاری‌شده) // - حذف کاراکترهای کنترلی (به‌جز \n و \t) که می‌تونن نمایش یا لاگ‌ها رو خراب کنن // - trim فاصله‌های اضافه و محدود کردن طول func SanitizeMessageText(raw string) (string, error) { if !utf8.ValidString(raw) { return "", ErrInvalidMessageEncoding } var b strings.Builder b.Grow(len(raw)) for _, r := range raw { if r == '\n' || r == '\t' { b.WriteRune(r) continue } if r < 0x20 || r == 0x7F { continue } b.WriteRune(r) } text := strings.TrimSpace(b.String()) if text == "" { return "", ErrMessageEmpty } if utf8.RuneCountInString(text) > MaxMessageLength { return "", ErrMessageTooLong } return text, nil }