'PHP: Telegram Bot: Insert line break to text message

"\n" and "\r\n", tested in text message sent by telegram bot, to create line break. Instead of showing line break, underline _ will appear after using them.

How I could printing line feed in telegram message sent by bot?

CODE

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

Message Demo enter image description here

Any help will be appreciated.



Solution 1:[1]

There is a better way! The problem is because of URL encodings... You can use normal PHP text using \n but by passing it to urlencode method, as follows:

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

It works for me!

Solution 2:[2]

1) If you develop your code in Windows/Linux OS, you can simply use enter in text:

$text = 'test 123
         another text';

Thats all!

2) If your code run on Windows/Linux server, you can use PHP_EOL constant instead of \n:

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

3) And if you search for an OS independent soloution, you can use %0A or chr(10) for this purpose:

$text = 'text 123 '.chr(10).'yet another text';

Solution 3:[3]

For future visitor just I quote @Dagon answer in comments:

Using %0A will make line feed in telegram messages

Solution 4:[4]

After reading and trying all of these answers, I just wanted to post my own solution. I have an application in Laravel 5.8 that sends the reservation both by e-mail and a Telegram message.

$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,
        ]);

More or less I have used all the html tags that Telegram API allows. You should pay attention \n must be in double quotes.

Solution 5:[5]

You can use %0A instead of \n.

Solution 6:[6]

it may be not show result as you wants in Unicode languages like Persian! you can prepare your text and use this:

$txt = implode("\n", explode('\n', $txt));

Solution 7:[7]

To avoid coding and encoding issues, I used this simple solution in my code:

  • First, I send my text message in HTML format by setting the parse_mode=HTML argument in the "sendMessage" URL.
  • Then, I insert the following code for each line break:

    <pre>\n</pre>

ie.

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

Of course the text variable was curl escaped before appended to the URL:

$text = curl_escape($handle, $text);

Solution 8:[8]

All these answers are at the same time "right" and "wrong". In fact in depend a lot of the input you have. For example if you have a text area for input and then send the content to Telegram, if the user write in the text area and press return, the text in Telegram will be

       hello\neverybody 

and not

       hello
       everybody

Performing URL encode will change nothing. After struggling a lot I discover a conflict with the fact sending the text area data from a page to another page escape some data.

The way I solve that is to remplace the escaped \n by a non-escaped one. So:

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

It works on Mac, PC and so on with text from text area.

Solution 9:[9]

ez way?

$txt = "Thanks for joining, Every day at </br> almost 18:30 GMT an intersting video will be sent";

or

$txt = "Thanks for joining, Every day \r\n at almost 18:30 GMT an intersting video will be sent";

Solution 10:[10]

I solved the problem in this way :

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

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

try here : https://telegram-bot-sdk.readme.io/docs/sendmessage

Solution 11:[11]

you should use urlencode to solve this problem:

$text ="sth sth
sth sth";
$text = urlencode($text);

Solution 12:[12]

for me this solution works: use double quotation mark

$message='Hi'
$message=$message."\n";
$message=$message.'Guys'

Solution 13:[13]

try something like this, its work for me, and you need to add parameter parse_mode.

$text = "exampletest \n example"

or someting like this:

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

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

Solution 14:[14]

It it easy just copy break line from anywhare to pass in code. enter image description here