68

"\n"并且"\r\n",在电报机器人发送的短信中进行测试,以创建换行符。_使用它们后将出现 下划线,而不是显示换行符。

如何在机器人发送的电报消息中打印换行符?

代码

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

消息演示 在此处输入图像描述

任何帮助将不胜感激。

4

13 回答 13

85

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

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

这个对我有用!

于 2015-08-12T14:56:01.057 回答
45

1) 如果您在 Windows/Linux 操作系统中开发代码,您可以简单地使用 enter in text:

$text = 'test 123
         another text';

就这样!

2) 如果您的代码在 Windows/Linux 服务器上运行,您可以使用PHP_EOL常量代替\n

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

3)如果您搜索独立于操作系统的解决方案,您可以使用%0Aorchr(10)用于此目的:

$text = 'text 123 '.chr(10).'yet another text';
于 2015-08-12T04:10:48.663 回答
26

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

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

于 2015-08-10T17:28:16.423 回答
4

您可以使用 %0A 代替 \n。

于 2020-11-09T14:23:33.993 回答
3

在阅读并尝试了所有这些答案之后,我只想发布我自己的解决方案。我在 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 必须用双引号引起来。

于 2019-05-14T18:14:53.183 回答
3

在波斯语等 Unicode 语言中,它可能无法显示您想要的结果!您可以准备文本并使用它:

$txt = implode("\n", explode('\n', $txt));
于 2017-09-23T03:51:22.123 回答
2

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

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

    <pre>\n</pre>

IE。

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

当然text变量在附加到 URL 之前被 curl 转义:

$text = curl_escape($handle, $text);
于 2017-11-11T11:08:49.017 回答
1

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

       hello\neverybody 

并不是

       hello
       everybody

执行 URL 编码不会改变任何内容。经过一番挣扎后,我发现将文本区域数据从一个页面发送到另一个页面的事实存在冲突,从而转义了一些数据。

我解决这个问题的方法是将转义的 \n 替换为非转义的。所以:

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

它适用于 Mac、PC 等,带有来自文本区域的文本。

于 2018-12-21T20:20:14.077 回答
0

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

$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

于 2016-11-11T13:46:30.910 回答
0

尝试这样的事情,它对我有用,你需要添加参数 parse_mode。

$text = "exampletest \n example"

或类似的东西:

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

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

于 2021-06-10T01:45:10.400 回答
0

你应该使用 urlencode 来解决这个问题:

$text ="sth sth
sth sth";
$text = urlencode($text);
于 2017-03-20T19:40:28.717 回答
0

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

$message='Hi'
$message=$message."\n";
$message=$message.'Guys'
于 2018-07-18T09:36:13.210 回答
-1

很容易从任何地方复制断线来传递代码。 在此处输入图像描述

于 2021-08-23T15:29:18.383 回答