diff --git a/telegram_bot/screens/add_creative.go b/telegram_bot/screens/add_creative.go index 8f03b72..7c64290 100644 --- a/telegram_bot/screens/add_creative.go +++ b/telegram_bot/screens/add_creative.go @@ -3,6 +3,7 @@ package screens import ( "context" "fmt" + "regexp" "strings" "example.com/m/adapter/backend" @@ -473,17 +474,9 @@ func (s *AddCreative) extractCreativeFromMessage(message *echotron.Message) { func (s *AddCreative) generateCreativeName() string { // Если есть текст, берем первые слова if s.Text != nil && *s.Text != "" { - // Удаляем HTML теги для генерации названия - cleanText := strings.ReplaceAll(*s.Text, "", "") - cleanText = strings.ReplaceAll(cleanText, "", "") - cleanText = strings.ReplaceAll(cleanText, "", "") - cleanText = strings.ReplaceAll(cleanText, "", "") - cleanText = strings.ReplaceAll(cleanText, "", "") - cleanText = strings.ReplaceAll(cleanText, "", "") - cleanText = strings.ReplaceAll(cleanText, "", "") - cleanText = strings.ReplaceAll(cleanText, "", "") - cleanText = strings.ReplaceAll(cleanText, "", "") - cleanText = strings.ReplaceAll(cleanText, "", "") + // Удаляем ВСЕ HTML теги с помощью regex + re := regexp.MustCompile(`<[^>]*>`) + cleanText := re.ReplaceAllString(*s.Text, "") // Берем первые 50 символов runes := []rune(strings.TrimSpace(cleanText)) @@ -499,6 +492,14 @@ func (s *AddCreative) generateCreativeName() string { return "Новый креатив" } +// escapeHTML экранирует HTML-символы для безопасного вывода +func escapeHTML(s string) string { + s = strings.ReplaceAll(s, "&", "&") + s = strings.ReplaceAll(s, "<", "<") + s = strings.ReplaceAll(s, ">", ">") + return s +} + // showCreativeConfirmation показывает превью креатива + панель с предложением добавить func (s *AddCreative) showCreativeConfirmation(b *bot.Bot) { @@ -510,11 +511,13 @@ func (s *AddCreative) showCreativeConfirmation(b *bot.Bot) { } // 2. Формируем текст панели управления + // Экранируем HTML-символы в названии для безопасного вывода + escapedName := escapeHTML(*s.Name) confirmText := fmt.Sprintf(`➕ Добавляем этот креатив? Название креатива: %s -Если нужно изменить название креатива, просто введите его здесь. Название автоматически сохранится. Лимит 200 символов.`, *s.Name) +Если нужно изменить название креатива, просто введите его здесь. Название автоматически сохранится. Лимит 200 символов.`, escapedName) // 3. Показываем панель с кнопками редактирования + сохранения var buttons [][]echotron.InlineKeyboardButton