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
<?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
<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:
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;
}
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!
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...
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!
Olle, pero tienes la función trim, esa te elimina todos los espacios, saltos de línea, etc.
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.
Hice así y funciona, ¿qué les parece?
$data = htmlspecialchars($data);
$data = trim($data);
$data = preg_replace('/\r/m', '', $data);
$data = preg_replace('/\n{3,}/m', "\n\n", $data);