PHP: Telegram Bot: Insertar salto de línea en mensaje de texto

4 minutos de lectura

avatar de usuario
Hossein Shahsahebi

"\n" y "\r\n", probado en un mensaje de texto enviado por el bot de Telegram, para crear un salto de línea. En lugar de mostrar el salto de línea, subraye _ aparecerá después de usarlos.

¿Cómo podría imprimir un salto de línea en un mensaje de telegrama enviado por bot?

CÓDIGO

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

Mensaje de demostración
ingrese la descripción de la imagen aquí

Cualquier ayuda será apreciada.

  • @Dagon muchas gracias, el primero solo duplica el mensaje e imprime dos veces, pero el segundo hace el trabajo. ¿Puedo preguntar dónde está la fuente de estos códigos?

    – Hossein Shahsahebi

    09/08/2015 a las 20:56

  • El primer hit de Google para mí fue: twilio.com/help/faq/sms/…

    usuario557846

    09/08/2015 a las 20:58

  • un simple \n debería funcionar, es posible que el administrador de bots que está utilizando esté haciendo algo de limpieza antes de enviar el mensaje. estoy usando nodejs y \n funciona bien

    – Exlord

    14 de diciembre de 2016 a las 11:04

avatar de usuario
Majid

¡Hay una mejor manera! El problema se debe a las codificaciones de URL… Puede usar texto PHP normal usando \n pero pasándoselo a urlencode método, de la siguiente manera:

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

¡Esto funciona para mi!

  • Lo siento Majid, ahora pruebo otra respuesta y todas las opciones fallaron, así que desmarco su respuesta y verifico la tuya

    – Hossein Shahsahebi

    16 de agosto de 2015 a las 18:56

  • urlencode no me funciona (codifica todo, incluidos los espacios). Si tiene la costumbre de usar comillas simples, \n debe estar entre comillas dobles: $text = ‘my text’ . “\norte”;

    –Quentin Campbell

    5 de diciembre de 2018 a las 15:40

avatar de usuario
علیرضا

1) Si desarrolla su código en el sistema operativo Windows/Linux, simplemente puede ingresar el texto:

$text="test 123
         another text";

¡Eso es todo!

2) Si su código se ejecuta en un servidor Windows/Linux, puede usar PHP_EOL constante en lugar de \n:

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

3) Y si busca una solución independiente del sistema operativo, puede usar %0A o chr(10) para este propósito:

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

  • @Majid porque estás en Mac! en iOS, el PHP_EOL y salto de línea, es igual a %0D (o \r). pero en linux y windows, el PHP_EOL y el salto de línea es igual a %0A (o \n) Y %0D%0A (o \r\n).

    – علیرضا

    14 de agosto de 2015 a las 3:22


  • @Majid agrego una tercera vía para ti 🙂

    – علیرضا

    14 de agosto de 2015 a las 3:33

  • Gracias por considerar el problema. ¡Estoy en Mac, pero el servidor que ejecuta los códigos PHP es un servidor Linux en Internet! De todos modos, gracias por agregar la tercera vía 🙂

    – Majid

    15 de agosto de 2015 a las 2:02

Para futuros visitantes, solo cito la respuesta de @Dagon en los comentarios:

Usando %0A hará saltos de línea en los mensajes de Telegram

  • Esta debería ser la respuesta aceptada. los urlencode la función no es independiente del lenguaje. Tu solución funciona al usar la API de Telegram en cualquier entorno o idioma.

    – Dawson B.

    3 de noviembre de 2020 a las 23:39

Después de leer y probar todas estas respuestas, solo quería publicar mi propia solución. Tengo una aplicación en Laravel 5.8 que envía la reserva tanto por e-mail como por mensaje de Telegram.

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

Más o menos he usado todas las etiquetas html que permite la API de Telegram. Debe prestar atención \n debe estar entre comillas dobles.

Puede usar %0A en lugar de \n.

avatar de usuario
Payam Aryanfard

¡Es posible que no muestre el resultado que desea en idiomas Unicode como el persa! puedes preparar tu texto y usar esto:

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

avatar de usuario
Hassan AFIF

Para evitar problemas de codificación y codificación, utilicé esta solución simple en mi código:

  • Primeroenvío mi mensaje de texto en formato HTML configurando el parse_mode=HTML argumento en la URL “sendMessage”.
  • Despuésinserto el siguiente código para cada salto de línea:

    <pre>\n</pre>

es decir.

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

por supuesto el texto la variable se escapó de curl antes de agregarse a la URL:

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

¿Ha sido útil esta solución?