Одинаковые абзацы и переносы строк в 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>");