[Pregunta]: Problemas con saltos de lineas seguidos en un formulario (textarea)

Iniciado por Leguim, 19 Diciembre 2019, 20:00 PM

0 Miembros y 1 Visitante están viendo este tema.

Leguim

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 (php) [Seleccionar]

<?php
$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.';
$string Clearn_Data('textarea'$string);

echo 
nl2br($string);
?>



dinámica
Código (php) [Seleccionar]

<form method="post">
<textarea name="texto" placeholder="texto"></textarea>
<button type="submit" name="enviar">enviar</button>
</form>

if(isset($_POST['enviar']))
{
$texto = Clearn_Data('textarea', $_POST['texto']);

echo nl2br($texto);
}


La función es:
Código (php) [Seleccionar]

function Clearn_Data($type, $data)
{
      if($type === 'textarea')
{
$data = htmlspecialchars($data);
$data = trim($data);
$data = preg_replace('/\n{3,}/m', "\n\n", $data);
}

     return $data;
}

AlbertoBSD

Tienes que pensar que hay sistenas envian

\r\n en Lugar de solo \n

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

Saludos!
Donaciones
1Coffee1jV4gB5gaXfHgSHDz9xx9QSECVW

engel lex

Cita de: AlbertoBSD en 19 Diciembre 2019, 22:05 PM
Tienes que pensar que hay sistenas envian

\r\n en Lugar de solo \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...
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

AlbertoBSD

A ver depurando con las herramientas de desarrollador del navagador  :silbar: :silbar: :silbar:

Enviado:

texto: Prueba con tres "Enter" en windows
T


1
enviar:


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


%0D%0A%0D%0A%0D%0A

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

Saludos!
Donaciones
1Coffee1jV4gB5gaXfHgSHDz9xx9QSECVW

@XSStringManolo

Olle, pero tienes la función trim, esa te elimina todos los espacios, saltos de línea, etc.

MinusFour

Cita de: @?0!,5^34 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.

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

Leguim

Hice así y funciona, ¿qué les parece?

Código (php) [Seleccionar]

                        $data = htmlspecialchars($data);
$data = trim($data);
$data = preg_replace('/\r/m', '', $data);
$data = preg_replace('/\n{3,}/m', "\n\n", $data);