PHP: Telegram Bot: Zeilenumbruch in Textnachricht einfügen

Lesezeit: 4 Minuten

Benutzer-Avatar
Hossein Shahsahebi

"\n" und "\r\n", getestet in einer per Telegramm-Bot gesendeten Textnachricht, um einen Zeilenumbruch zu erstellen. Statt Zeilenumbruch anzuzeigen, unterstreichen _ wird nach der Verwendung angezeigt.

Wie kann ich Zeilenvorschübe in Telegrammnachrichten drucken, die vom Bot gesendet werden?

CODE

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

Nachrichten-Demo
Geben Sie hier die Bildbeschreibung ein

Jede Hilfe wird geschätzt.

  • @Dagon vielen Dank, zuerst dupliziere einfach die Nachricht und drucke sie zweimal, aber der zweite erledigt die Arbeit. Darf ich fragen, wo die Quelle dieser Codes ist?

    – Hossein Shahsahebi

    9. August 2015 um 20:56 Uhr

  • Der erste Google-Treffer war für mich: twilio.com/help/faq/sms/…

    Benutzer557846

    9. August 2015 um 20:58 Uhr

  • eine einfache \n funktionieren sollte, ist es möglich, dass der von Ihnen verwendete Bot-Manager vor dem Senden der Nachricht einige Aufräumarbeiten durchführt. Ich verwende nodejs und \n funktioniert prima.

    – Exlord

    14. Dezember 2016 um 11:04 Uhr

Benutzer-Avatar
Majid

Es gibt einen besseren Weg! Das Problem liegt an URL-Codierungen … Sie können normalen PHP-Text verwenden \n sondern durch Weitergabe an urlencode Methode wie folgt:

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

Für mich geht das!

  • Tut mir leid, Majid, jetzt teste ich eine andere Antwort und alle Optionen sind fehlgeschlagen, also deaktiviere ich seine Antwort und überprüfe deine

    – Hossein Shahsahebi

    16. August 2015 um 18:56 Uhr

  • urlencode funktioniert bei mir nicht (es codiert alles, einschließlich Leerzeichen). Wenn Sie wie ich einfache Anführungszeichen verwenden, muss \n in doppelte Anführungszeichen gesetzt werden: $text = ‘ my text’ . “\n”;

    – Quentin Campbell

    5. Dezember 2018 um 15:40 Uhr

Benutzer-Avatar
علیرضا

1) Wenn Sie Ihren Code in Windows/Linux OS entwickeln, können Sie einfach Text eingeben:

$text="test 123
         another text";

Das ist alles!

2) Wenn Ihr Code auf einem Windows/Linux-Server ausgeführt wird, können Sie verwenden PHP_EOL konstant statt \n:

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

3) Und wenn Sie nach einer OS-unabhängigen Lösung suchen, können Sie verwenden %0A oder chr(10) für diesen Zweck:

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

  • @Majid, weil du auf dem Mac bist! in iOS, die PHP_EOL und Zeilenumbruch, ist gleich %0D (oder \r). aber in linux und windows, die PHP_EOL und Zeilenumbruch ist gleich %0A (oder \n) UND %0D%0A (oder \r\n).

    – علیرضا

    14. August 2015 um 3:22 Uhr


  • @Majid ich füge einen dritten Weg für dich hinzu 🙂

    – علیرضا

    14. August 2015 um 3:33 Uhr

  • Vielen Dank für die Berücksichtigung des Problems. Ich arbeite auf einem Mac, aber der Server, auf dem die PHP-Codes ausgeführt werden, ist ein Linux-Server im Internet! Wie auch immer, danke für das Hinzufügen des dritten Weges 🙂

    – Majid

    15. August 2015 um 2:02 Uhr

Für zukünftige Besucher zitiere ich nur die Antwort von @Dagon in den Kommentaren:

Verwenden %0A wird Zeilenvorschub in Telegrammnachrichten machen

  • Dies sollte die akzeptierte Antwort sein. Das urlencode Funktion ist nicht sprachunabhängig. Ihre Lösung funktioniert bei Verwendung der Telegramm-API in jeder Umgebung oder Sprache.

    – Dawson B

    3. November 2020 um 23:39 Uhr

Nachdem ich all diese Antworten gelesen und ausprobiert hatte, wollte ich nur meine eigene Lösung posten. Ich habe eine Anwendung in Laravel 5.8, die die Reservierung sowohl per E-Mail als auch per Telegrammnachricht sendet.

$telegramMessage = 
        "<strong>Reservation Request</strong>\n".
         '<strong>Name:</strong> ' . $reservation->reserv_name . "\n".
         '<strong>E-mail:</strong> <a href="https://stackoverflow.com/questions/31908527/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,
        ]);

Ich habe mehr oder weniger alle HTML-Tags verwendet, die die Telegram-API zulässt. Sie sollten darauf achten, dass \n in doppelte Anführungszeichen gesetzt werden muss.

Sie können %0A anstelle von \n verwenden.

Benutzer-Avatar
Payam Aryanfard

In Unicode-Sprachen wie Persisch wird das Ergebnis möglicherweise nicht wie gewünscht angezeigt! Sie können Ihren Text vorbereiten und verwenden:

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

Benutzer-Avatar
Hassan AFIF

Um Codierungs- und Codierungsprobleme zu vermeiden, habe ich diese einfache Lösung in meinem Code verwendet:

  • Zuerstsende ich meine Textnachricht im HTML-Format, indem ich die parse_mode=HTML -Argument in der URL „sendMessage“.
  • Dannfüge ich für jeden Zeilenumbruch folgenden Code ein:

    <pre>\n</pre>

dh.

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

Natürlich die Text Variable wurde mit Curl-Escapezeichen versehen, bevor sie an die URL angehängt wurde:

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

1342100cookie-checkPHP: Telegram Bot: Zeilenumbruch in Textnachricht einfügen

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy