PHP:电报机器人:在文本消息中插入换行符

"\n""\r\n"(在电报bot发送的短信中进行了测试)以创建换行符。 使用下划线后,将显示下划线_,而不是显示换行符。

我如何在bot发送的电报消息中打印换行符?

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

留言示范enter image description here

任何帮助将不胜感激。

Hossein Shahsahebi asked 2020-07-06T01:51:13Z
10个解决方案
53 votes

有一个更好的方法! 问题是由于URL编码...您可以使用\n使用普通的PHP文本,但可以将其传递给urlencode方法,如下所示:

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

这个对我有用!

Majid answered 2020-07-06T01:51:31Z
32 votes

1)如果您在Windows / Linux OS中开发代码,则只需使用Enter in text:

$text = 'test 123
         another text';

就这样!

2)如果您的代码在Windows / Linux服务器上运行,则可以使用%0A常量代替chr(10)

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

3)并且,如果您搜索与操作系统无关的解决方案,则可以使用%0Achr(10)来实现此目的:

$text = 'text 123 '.chr(10).'yet another text';
علیرضا answered 2020-07-06T01:52:04Z
8 votes

对于未来的访客,我在评论中引用@Dagon答案:

使用%0A将在电报消息中进行换行

Hossein Shahsahebi answered 2020-07-06T01:52:29Z
1 votes

您可能无法在波斯语等Unicode语言中显示结果!您可以准备文本并使用以下代码:

$txt = implode("\n", explode('\n', $txt));
Payam Aryanfard answered 2020-07-06T01:52:49Z
0 votes

我以这种方式解决了这个问题:

$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]

Pippi answered 2020-07-06T01:53:13Z
0 votes

您应该使用urlencode解决此问题:

$text ="sth sth
sth sth";
$text = urlencode($text);
sajad abbasi answered 2020-07-06T01:53:33Z
0 votes

为了避免编码和编码问题,我在代码中使用了以下简单解决方案:

  • 首先,通过在“ sendMessage” URL中设置parse_mode = HTML参数,以HTML格式发送文本消息。
  • 然后,为每个换行符插入以下代码:

    <pre>\n</pre>

即。

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

当然,文本变量在附加到URL之前是curl逸出的:

$text = curl_escape($handle, $text);
Hassan AFIF answered 2020-07-06T01:54:10Z
0 votes

对我来说,这个解决方案有效:使用双引号

$message='Hi'
$message=$message."\n";
$message=$message.'Guys'
Moein Karimi answered 2020-07-06T01:54:30Z
0 votes

所有这些答案同时是“正确”和“错误”。 实际上,取决于您拥有的很多输入。 例如,如果您有一个用于输入的文本区域,然后将内容发送给Telegram,如果用户在文本区域中书写并按回车键,则Telegram中的文本将为

       hello\neverybody 

并不是

       hello
       everybody

执行URL编码不会改变任何内容。 经过大量的努力之后,我发现与将文本区域数据从页面发送到另一页面这一事实发生冲突,从而逃脱了一些数据。

我解决的方法是用一个非转义的\ n代替转义的\ n。所以:

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

它适用于Mac,PC等,并带有文本区域中的文本。

Peter answered 2020-07-06T01:55:08Z
0 votes

阅读并尝试了所有这些答案之后,我只想发布自己的解决方案。 我在Laravel 5.8中有一个应用程序,可以通过电子邮件和电报消息发送预订。

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

我或多或少地使用了Telegram API允许的所有html标签。 您应注意\ n必须用双引号引起来。

Mycodingproject answered 2020-07-06T01:55:32Z
translate from https://stackoverflow.com:/questions/31908527/php-telegram-bot-insert-line-break-to-text-message