web-dev-qa-db-fra.com

PHP: Telegram Bot: Insérer un saut de ligne dans un message texte

"\n" et "\r\n", testés dans un message texte envoyé par le télégramme bot, pour créer un saut de ligne. Au lieu d'afficher un saut de ligne, le soulignement _ apparaît après leur utilisation. 

Comment puis-je imprimer un saut de ligne dans un message de télégramme envoyé par 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

Toute aide serait appréciée.

38
Hossein Shahsahebi

Il y a un meilleur moyen! Le problème est dû aux encodages d'URL ... Vous pouvez utiliser du texte PHP normal en utilisant \n mais en le transmettant à la méthode urlencode, comme suit:

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

Ça marche pour moi!

47
Majid

1) Si vous développez votre code sous Windows/Linux, vous pouvez simplement utiliser entrer du texte:

$text = 'test 123
         another text';

C'est tout!

2) Si votre code est exécuté sur un serveur Windows/Linux, vous pouvez utiliser la constante PHP_EOL constante au lieu de \n:

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

3) Et si vous recherchez une solution indépendante du système d’exploitation, vous pouvez utiliser %0A ou chr(10) à cette fin:

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

Pour les futurs visiteurs, je cite @Dagon dans les commentaires:

Utiliser %0A créera un saut de ligne dans les messages de télégramme

3
Hossein Shahsahebi

vous devriez utiliser urlencode pour résoudre ce problème:

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

Toutes ces réponses sont à la fois "bonnes" et "mauvaises". En fait, cela dépend beaucoup de votre contribution. Par exemple, si vous avez une zone de texte à saisir, puis envoyez le contenu à Telegram, si l'utilisateur écrit dans la zone de texte et appuyez sur la touche Entrée, le texte dans Telegram sera 

       hello\neverybody 

et pas

       hello
       everybody

Effectuer un encodage d'URL ne changera rien. Après avoir beaucoup lutté, je découvre un conflit avec le fait d'envoyer les données de zone de texte d'une page à une autre page échappant à certaines données.

Je résous ce problème en remplaçant le\n échappé par un non-échappé . Donc:

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

Cela fonctionne sur Mac, PC et ainsi de suite avec du texte de la zone de texte. 

0
Peter

Pour éviter les problèmes de codage et d'encodage, j'ai utilisé cette solution simple dans mon code:

  • Premièrement , j’envoie mon message texte au format HTML en définissant l’argument parse_mode = HTML dans l’URL "sendMessage".
  • Ensuite , j'insère le code suivant pour chaque saut de ligne:

    <pre>\n</pre>

c'est à dire.

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

Bien sûr, la variable text était échappée par curl avant d’être ajoutée à l’URL:

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

il se peut que le résultat ne soit pas affiché comme vous le souhaitez dans les langues Unicode telles que le persan! vous pouvez préparer votre texte et l'utiliser:

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

pour moi, cette solution fonctionne: utilisez un guillemet double

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

J'ai résolu le problème de cette façon: 

$txt = 'aaaaaaaaa\nnew line1 \nnewline2';
$parameters = array('chat_id' => $chatId, "text" => $txt);

$parameters["method"] = "sendMessage";
echo json_encode($parameters);

essayez ici: https://telegram-bot-sdk.readme.io/docs/sendmessage

0
Matteo Pipitone