web-dev-qa-db-ja.com

PHP:Telegram Bot:テキストメッセージに改行を挿入する

"\n"および"\r\n"は、テレグラムボットによって送信されるテキストメッセージでテストされ、改行を作成します。改行を表示する代わりに、使用後に下線_が表示されます。

ボットから送信された電報メッセージに改行を印刷するにはどうすればよいですか?

CODE

$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

任意の助けをいただければ幸いです。

45

もっと良い方法があります!問題はURLエンコードのためです... \nを使用して通常のPHPテキストを使用できますが、次のようにurlencodeメソッドに渡すことで:

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

わたしにはできる!

52
Majid

1)Windows/Linux OSでコードを開発する場合は、単にテキストでEnterを使用できます。

$text = 'test 123
         another text';

それで全部です!

2)コードをWindows/Linuxサーバーで実行する場合、PHP_EOLの代わりに\n定数を使用できます。

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

3)また、OSに依存しないソースを検索する場合、この目的で%0Aまたはchr(10)を使用できます。

$text = 'text 123 '.chr(10).'yet another text';
32
علیرضا

将来の訪問者のために、コメントで@Dagonの回答を引用します:

%0Aを使用すると、電報メッセージに改行が挿入されます

8

ペルシャ語のようなユニコード言語で望んでいるように結果が表示されないかもしれません!テキストを準備してこれを使用できます。

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

この問題を解決するには、urlencodeを使用する必要があります。

$text ="sth sth
sth sth";
$text = urlencode($text);
0
sajad abbasi

これらの答えはすべて、「正しい」と同時に「間違っている」ものです。実際、あなたが持っている入力の多くに依存しています。たとえば、入力用のテキスト領域があり、コンテンツをTelegramに送信する場合、ユーザーがテキスト領域に書き込み、returnキーを押すと、Telegramのテキストは

       hello\neverybody 

ではなく

       hello
       everybody

URLエンコードを実行しても何も変わりません。多くの苦労の末、テキストエリアデータをページから別のページに送信してデータをエスケープするという事実との競合を発見しました。

私が解決する方法は、エスケープされた\ nをエスケープされていないものに置き換えることです。そう:

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

テキスト領域のテキストを使用して、Mac、PCなどで動作します。

0
Peter

これらの答えをすべて読んで試した後、自分のソリューションを投稿したかっただけです。 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は二重引用符で囲む必要があります。

0
Mycodingproject

コーディングとエンコードの問題を回避するために、コードで次の簡単なソリューションを使用しました。

  • 最初、「sendMessage」URLでparse_mode = HTML引数を設定して、HTML形式でテキストメッセージを送信します。
  • Then、各改行に次のコードを挿入します。

    <pre>\n</pre>

すなわち。

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

もちろん、text変数は、URLに追加される前にcurlエスケープされました:

$text = curl_escape($handle, $text);
0
Hassan AFIF

私にとってこの解決策は機能します:二重引用符を使用します

$message='Hi'
$message=$message."\n";
$message=$message.'Guys'
0
Moein Karimi

この方法で問題を解決しました:

$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

0
Pippi