PHP: Telegram Bot: Insert line break to text message

PhpTelegram BotLinefeed

Php Problem Overview


"\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.

Php Solutions


Solution 1 - Php

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 - Php

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

    $text = 'test 123 another text';

Thats all!

  1. 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';

  2. 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 - Php

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

Using %0A will make line feed in telegram messages

Solution 4 - Php

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 - Php

You can use %0A instead of \n.

Solution 6 - Php

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 - Php

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 - Php

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 - Php

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 - Php

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 - Php

you should use urlencode to solve this problem:

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

Solution 12 - Php

for me this solution works: use double quotation mark

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

Solution 13 - Php

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 - Php

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

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionHossein ShahsahebiView Question on Stackoverflow
Solution 1 - PhpMajidView Answer on Stackoverflow
Solution 2 - PhpعلیرضاView Answer on Stackoverflow
Solution 3 - PhpHossein ShahsahebiView Answer on Stackoverflow
Solution 4 - PhpMycodingprojectView Answer on Stackoverflow
Solution 5 - PhpDorozhkin CyrilView Answer on Stackoverflow
Solution 6 - PhpPayam AryanfardView Answer on Stackoverflow
Solution 7 - PhpHassan AFIFView Answer on Stackoverflow
Solution 8 - PhpPeterView Answer on Stackoverflow
Solution 9 - PhpAref SolaimanyView Answer on Stackoverflow
Solution 10 - PhpPippiView Answer on Stackoverflow
Solution 11 - Phpsajad abbasiView Answer on Stackoverflow
Solution 12 - PhpMoein KarimiView Answer on Stackoverflow
Solution 13 - PhpSyaifudin ZuhriView Answer on Stackoverflow
Solution 14 - PhpSUON RATANAView Answer on Stackoverflow