Одинаковые абзацы и переносы строк в Telegram и письмах на PHP

Чтобы абзац выглядел одинаково и в сообщении Telegram-бота, и в письме (например, email), нужно учитывать особенности форматирования в обеих средах и использовать универсальный способ разметки текста.

Ключевые моменты

  • В Telegram для форматирования текста обычно используется parse_mode со значением "HTML" или "MarkdownV2".

  • В письмах (email) обычно используется HTML-разметка.

  • Для создания абзацев и переносов строк в HTML используется тег <p> для абзацев и <br/> для переноса строки.

  • В Telegram тег <p> не поддерживается, а <br> не всегда корректно работает, поэтому для переноса строки в Telegram используют символы перевода строки \n.

  • В Markdown для переноса строки обычно достаточно одной или двух пустых строк (двойной перевод строки), но в Telegram MarkdownV2 тоже требует \n.

Универсальный подход — формировать текст с учётом обеих систем

  • В HTML-письмах перенос строки в тексте делается тегом <br/> или разделением на абзацы тегами <p>...</p>.

  • Символы \n в теле письма не всегда приводят к переносу строки, особенно в HTML-формате.

  • Поэтому для письма нужно преобразовать все \n или \r\n в <br/> или обернуть текст в <p>.

Пример на PHP:

php
$html_text = nl2br($plain_text); // заменит \n на <br>

Или через str_replace:

php
$html_text = str_replace("\n", "<br>", $plain_text);
 

Пример на JavaScript

js
const text = "Первая строка\nВторая строка"; // Для Telegram const telegramText = text; // просто с \n // Для письма const emailHtml = text.replace(/\n/g, "<br>");