Foro de elhacker.net

Programación => Desarrollo Web => Mensaje iniciado por: Leguim en 19 Diciembre 2019, 20:00 pm



Título: [Pregunta]: Problemas con saltos de lineas seguidos en un formulario (textarea)
Publicado por: Leguim en 19 Diciembre 2019, 20:00 pm
Buenos días tengo un formulario muy simple:

Esto viene de un tema pasado para que puedan entender mejor: https://foro.elhacker.net/desarrollo_web/pregunta_iquestcomo_puedo_hacer_que_si_son_4_espacios_seguidos-t501708.0.html

La idea básica es que si son 3 saltos de líneas o más seguidos que están vacíos estos se conviertan en 2, por lo que si me mandan

"T







M"

esto se convierta en

"T


M"

No entiendo porque en el primer código donde lo hago de una forma más "estática" si funciona, pero si ya lo hago con un formulario usando un textarea ya no...

estática
Código
  1. <?php
  2. $string = '• Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod.'."\r\n\n\n\n\n\n\n\n\n".'• Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod.'."\r\n".'• Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod.';
  3. $string = Clearn_Data('textarea', $string);
  4.  
  5. echo nl2br($string);
  6. ?>
  7.  

dinámica
Código
  1. <form method="post">
  2. <textarea name="texto" placeholder="texto"></textarea>
  3. <button type="submit" name="enviar">enviar</button>
  4. </form>
  5.  
  6. if(isset($_POST['enviar']))
  7. {
  8. $texto = Clearn_Data('textarea', $_POST['texto']);
  9.  
  10. echo nl2br($texto);
  11. }
  12.  

La función es:
Código
  1. function Clearn_Data($type, $data)
  2. {
  3.      if($type === 'textarea')
  4. {
  5. $data = htmlspecialchars($data);
  6. $data = trim($data);
  7. $data = preg_replace('/\n{3,}/m', "\n\n", $data);
  8. }
  9.  
  10.     return $data;
  11. }
  12.  


Título: Re: [Pregunta]: Problemas con saltos de lineas seguidos en un formulario (textarea)
Publicado por: AlbertoBSD en 19 Diciembre 2019, 22:05 pm
Tienes que pensar que hay sistenas envian

Código:
\r\n
en Lugar de solo
Código:
\n

Por lo tanto tu busquda no va coincider con los primeros.

Saludos!


Título: Re: [Pregunta]: Problemas con saltos de lineas seguidos en un formulario (textarea)
Publicado por: engel lex en 19 Diciembre 2019, 22:42 pm
Tienes que pensar que hay sistenas envian

Código:
\r\n
en Lugar de solo
Código:
\n

Por lo tanto tu busquda no va coincider con los primeros.

Saludos!

cuando se envia \r\n 3 veces seguidas son \r\n\n\n o \r\n\r\n\r\n? ya que lo logico (bajo la propuestas de \r como retorno de carro) es que solo fuera uno, no?

si es web solamente, yo opino que quemes primero los /r en dicho caso...


Título: Re: [Pregunta]: Problemas con saltos de lineas seguidos en un formulario (textarea)
Publicado por: AlbertoBSD en 19 Diciembre 2019, 22:51 pm
A ver depurando con las herramientas de desarrollador del navagador  :silbar: :silbar: :silbar:

Enviado:
Código:
texto: Prueba con tres "Enter" en windows
T


1
enviar:

RawData:
Código:
texto=Prueba+con+tres+%22Enter%22+en+windows%0D%0AT%0D%0A%0D%0A%0D%0A1%0D%0A&enviar=


Código:
%0D%0A%0D%0A%0D%0A

Es \r\n\r\n\r\n

Saludos!


Título: Re: [Pregunta]: Problemas con saltos de lineas seguidos en un formulario (textarea)
Publicado por: @XSStringManolo en 19 Diciembre 2019, 23:25 pm
Olle, pero tienes la función trim, esa te elimina todos los espacios, saltos de línea, etc.


Título: Re: [Pregunta]: Problemas con saltos de lineas seguidos en un formulario (textarea)
Publicado por: MinusFour en 19 Diciembre 2019, 23:28 pm
Olle, pero tienes la función trim, esa te elimina todos los espacios, saltos de línea, etc.

Trim elimina espacios en blanco en los bordes del string, no todos los espacios en blanco.


Título: Re: [Pregunta]: Problemas con saltos de lineas seguidos en un formulario (textarea)
Publicado por: Leguim en 20 Diciembre 2019, 01:47 am
Hice así y funciona, ¿qué les parece?

Código
  1.                        $data = htmlspecialchars($data);
  2. $data = trim($data);
  3. $data = preg_replace('/\r/m', '', $data);
  4. $data = preg_replace('/\n{3,}/m', "\n\n", $data);
  5.