Одинаковые абзацы и переносы строк в 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:
$html_text = nl2br($plain_text); // заменит \n на <br>
Или через str_replace:
$html_text = str_replace("\n", "<br>", $plain_text);Пример на JavaScript
const text = "Первая строка\nВторая строка";
// Для Telegram
const telegramText = text; // просто с \n
// Для письма
const emailHtml = text.replace(/\n/g, "<br>");