PHP: Telegram Bot: вставьте разрыв строки в текстовое сообщение

"\n" и "\r\n", проверенные в текстовом сообщении, отправленном ботом Telegram, для создания разрыва строки. Вместо того, чтобы показывать разрыв строки, после их использования будет отображаться подчеркивание _.

Как я мог печатать перевод строки в телеграмме, отправленной ботом?

КОД

$txt = 'با تشکر از عضویت شما، هر روز حدود ساعت 10 شب یک ویدئوی جالب برای شما ارسال خواهد شد.';
$txt .= " \n ";
$txt .= 'Thanks for joining, Every day at almost 18:30 GMT an intersting video will be sent';

Демонстрация сообщения  введите описание изображения здесь

Любая помощь будет оценена по достоинству.


person Hossein Shahsahebi    schedule 09.08.2015    source источник
comment
@Dagon большое спасибо, первый просто продублирует сообщение и распечатает его дважды, а второй сделает свою работу. Могу я спросить, где источник этих кодов?   -  person Hossein Shahsahebi    schedule 09.08.2015
comment
первым обращением к Google был для меня: twilio.com/help/faq/sms/   -  person    schedule 09.08.2015
comment
простой \n должен работать, возможно, что менеджер ботов, который вы используете, выполняет некоторую очистку перед отправкой сообщения. Я использую nodejs, и \n отлично работает.   -  person Exlord    schedule 14.12.2016


Ответы (12)


Существует лучший способ! Проблема заключается в кодировке URL ... Вы можете использовать обычный текст PHP, используя \n, но передав его методу urlencode, как показано ниже:

$txt = urlencode("here is my text.\n and this is a new line \n another new line");

Меня устраивает!

person Majid    schedule 12.08.2015
comment
Извините, Маджид, теперь я тестирую другой ответ, и все варианты не сработали, поэтому я снимаю отметку с его ответа и проверяю ваш - person Hossein Shahsahebi; 16.08.2015
comment
urlencode у меня не работает (кодирует все, включая пробелы). Если у вас, как и у меня, есть привычка использовать одинарные кавычки, \ n должен быть в двойных кавычках: $ text = 'my text'. \ п; - person Quentin Campbell; 05.12.2018

1) Если вы разрабатываете свой код в ОС Windows / Linux, вы можете просто ввести текст:

$text = 'test 123
         another text';

Это все!

2) Если ваш код работает на сервере Windows / Linux, вы можете использовать константу PHP_EOL вместо \n:

$text = 'text 123 '.PHP_EOL.'yet another text';

3) И если вы ищете независимое от ОС решение, вы можете использовать для этой цели %0A или chr(10):

$text = 'text 123 '.chr(10).'yet another text';
person علیرضا    schedule 12.08.2015
comment
@Majid, потому что вы на Mac! в iOS PHP_EOL и разрыв строки равны %0D (или \r). но в Linux и Windows PHP_EOL и разрыв строки равны %0A (или \n) И %0D%0A (или \r\n). - person علیرضا; 14.08.2015
comment
@Majid, я добавляю вам третий способ :) - person علیرضا; 14.08.2015
comment
Спасибо за рассмотрение вопроса. Я использую Mac, но сервер, на котором выполняются коды PHP, - это сервер Linux в Интернете! В любом случае спасибо, что добавили третий способ :-) - person Majid; 15.08.2015

Для будущего посетителя просто цитирую ответ @Dagon в комментариях:

Использование %0A сделает перевод строки в сообщениях телеграммы

person Hossein Shahsahebi    schedule 10.08.2015
comment
Это должен быть принятый ответ. Функция urlencode не зависит от языка. Ваше решение работает при использовании API Telegram в любой среде и на любом языке. - person Dawson B; 04.11.2020

он может не показывать результат, как вы хотите, на языках Unicode, таких как персидский! вы можете подготовить свой текст и использовать его:

$txt = implode("\n", explode('\n', $txt));
person Payam Aryanfard    schedule 23.09.2017

Чтобы избежать проблем с кодированием и кодированием, я использовал это простое решение в своем коде:

  • Сначала я отправляю свое текстовое сообщение в формате HTML, задав аргумент parse_mode = HTML в URL-адресе sendMessage.
  • Затем я вставляю следующий код для каждого разрыва строки:

    <pre>\n</pre>

ie.

... sendMessage?parse_mode=HTML&text="... paragraph1<pre>\n</pre>paragraph2 ..."

Конечно, переменная text была экранирована перед добавлением к URL-адресу:

$text = curl_escape($handle, $text);
person Hassan AFIF    schedule 11.11.2017

Все эти ответы одновременно «правильные» и «неправильные». На самом деле это зависит от вашего вклада. Например, если у вас есть текстовая область для ввода, а затем вы отправляете контент в Telegram, если пользователь вводит текст в текстовой области и нажимает return, текст в Telegram будет

       hello\neverybody 

и не

       hello
       everybody

Выполнение кодирования URL ничего не изменит. После долгих усилий я обнаружил конфликт с фактом отправки данных текстовой области со страницы на другую страницу, ускользнувшую от некоторых данных.

Я решаю это так, чтобы заменить экранированный \ n на неэкранированный. Так:

      $my_msg = str_replace("\\n","\n",$my_msg);

Он работает на Mac, ПК и т. Д. С текстом из текстовой области.

person Peter    schedule 21.12.2018

Вы можете использовать% 0A вместо \ n.

person Dorozhkin Cyril    schedule 09.11.2020

Решил проблему таким образом:

$txt = 'aaaaaaaaa\nnew line1 \nnewline2';
$parameters = array('chat_id' => $chatId, "text" => $txt);

$parameters["method"] = "sendMessage";
echo json_encode($parameters);

попробуйте здесь: https://telegram-bot-sdk.readme.io/docs/sendmessage

person Pippi    schedule 11.11.2016

вы должны использовать urlencode для решения этой проблемы:

$text ="sth sth
sth sth";
$text = urlencode($text);
person sajad abbasi    schedule 20.03.2017

для меня это решение работает: используйте двойные кавычки

$message='Hi'
$message=$message."\n";
$message=$message.'Guys'
person Moein Karimi    schedule 18.07.2018

Прочитав и попробовав все эти ответы, я просто хотел опубликовать свое собственное решение. У меня есть приложение в Laravel 5.8, которое отправляет бронирование как по электронной почте, так и в сообщении Telegram.

$telegramMessage = 
        "<strong>Reservation Request</strong>\n".
         '<strong>Name:</strong> ' . $reservation->reserv_name . "\n".
         '<strong>E-mail:</strong> <a href="mailto:' . $reservation->email . '"> ' . $reservation->email . "</a>\n".
         '<strong>Phone:</strong> ' . $reservation->phone . "\n".
         '<strong>Reservation Date/Time:</strong> ' . $reservation->reserv_date_time->format('d-m-Y H:i') . "\n".
         '<strong>Number of people:</strong> ' . $reservation->number_of_people . "\n".
         '<strong>Message:</strong> ' . $reservation->reserv_message . "\n";

Telegram::sendMessage([
            'chat_id' => env('TELEGRAM_CHAT_ID', ''),
            'parse_mode' => 'HTML',
            'text' => $telegramMessage,
        ]);

Более или менее я использовал все теги html, которые позволяет Telegram API. Обратите внимание: \ n должен быть в двойных кавычках.

person Mycodingproject    schedule 14.05.2019

попробуйте что-то подобное, это работает для меня, и вам нужно добавить параметр parse_mode.

$text = "exampletest \n example"

или что-то вроде этого:

$text1 = 'example';
$text2 = 'next';
$data = $text1 . "\n" . $text2;

https://core.telegram.org/bots/api#formatting-options

person Syaifudin Zuhri    schedule 10.06.2021