Foros del Web » Programando para Internet » PHP »

Eliminar dobles saltos de linea

Estas en el tema de Eliminar dobles saltos de linea en el foro de PHP en Foros del Web. Buenas, llevo mas de 3 horas intentando eliminar los dobles saltos de linea de una cadena enviada desde un form, he conseguido logros a media ...
  #1 (permalink)  
Antiguo 01/12/2012, 08:29
 
Fecha de Ingreso: noviembre-2008
Ubicación: Cochabamba Bolivia
Mensajes: 519
Antigüedad: 16 años
Puntos: 26
Eliminar dobles saltos de linea

Buenas,

llevo mas de 3 horas intentando eliminar los dobles saltos de linea de una cadena enviada desde un form, he conseguido logros a media pero no puedo hacer que funcione bien, haber si me explico mejor.

Código PHP:
Ver original
  1. function QuitarDoblesSaltos($string){
  2.     $patron = "(<br />)+";//Patrón de búsqueda, que mediante expresión regular busca varios saltos seguidos
  3.     $sustituto = "<br />";//sustituye por un solo salto
  4.     $cadenasalida=eregi_replace ($patron,$sustituto,$string);
  5.  
  6.         return $cadenasalida;
  7.     }
  8. $txt1 = "El gato<br /><br /><br /><br /><br />que esta triste y azul"; // BRs (saltos de linea) en la misma linea
  9. $txt2 = "El gato<br />
  10. <br />
  11. <br />
  12. <br />
  13. <br />que esta triste y azul";  // BRs (saltos de linea)  en cada linea.
  14.  
  15. QuitarDoblesSaltos($txt); // FUNCIONA!!
  16. QuitarDoblesSaltos($txt2); // NO FUNCIONA!!
Esta función me quita los saltos de linea que estan en cadenas del tipo $txt1, pero si la cadena tiene saltos de linea doble del tipo $txt2 (me refiero a los BRs entre salto de linea)

con esto trato de imprimir el texto guardado en Mysql que esta guardado con las etiquetas HTML <br/>.

Aunque mi objetivo real es eliminar saltos de linea doble ya sea antes de guardar en la base de datos o bien al sacarlos de la base de datos, da igual pero el caso es que no quiero que se muestren dobles saltos de linea.

alguien puede ayudarme¿?
  #2 (permalink)  
Antiguo 01/12/2012, 09:20
 
Fecha de Ingreso: noviembre-2012
Mensajes: 66
Antigüedad: 12 años
Puntos: 10
Respuesta: Eliminar dobles saltos de linea

Supongo que el tema está en generalizar el patrón:

Uno o varios <br /> seguido/s o no de retorno de carro será sustituido por un <br />(sin retorno de carro)
Código PHP:
function QuitarDoblesSaltos($string){
    
$patron "#(<br />((\n)*))+#";//Patrón de búsqueda, que mediante expresión regular busca varios saltos seguidos
    
$sustituto "<br />";//sustituye por un solo salto
    
$cadenasalida=preg_replace ($patron,$sustituto,$string);
 
        return 
$cadenasalida;
    } 

Yo diría que así tendría que ir...

Salu2 ;)

Última edición por jmdearpe; 01/12/2012 a las 09:26
  #3 (permalink)  
Antiguo 01/12/2012, 10:28
 
Fecha de Ingreso: noviembre-2008
Ubicación: Cochabamba Bolivia
Mensajes: 519
Antigüedad: 16 años
Puntos: 26
Respuesta: Eliminar dobles saltos de linea

Cita:
Iniciado por jmdearpe Ver Mensaje
Supongo que el tema está en generalizar el patrón:

Uno o varios <br /> seguido/s o no de retorno de carro será sustituido por un <br />(sin retorno de carro)
Código PHP:
function QuitarDoblesSaltos($string){
    
$patron "#(<br />((\n)*))+#";//Patrón de búsqueda, que mediante expresión regular busca varios saltos seguidos
    
$sustituto "<br />";//sustituye por un solo salto
    
$cadenasalida=preg_replace ($patron,$sustituto,$string);
 
        return 
$cadenasalida;
    } 

Yo diría que así tendría que ir...

Salu2 ;)
He modificado el codigo y sigue sin eliminarse los saltos de linea.
Código PHP:
Ver original
  1. function QuitarDoblesSaltos($string){
  2.     $patron = "#(<br />((\n)*))+#";//Patrón de búsqueda, que mediante expresión regular busca varios saltos seguidos
  3.     $sustituto = "<br />";//sustituye por un solo salto
  4.     $cadenasalida=eregi_replace ($patron,$sustituto,$string);
  5.  
  6.         return $cadenasalida;
  7.     }

tambien habia intentado con otro codigo que encontre x ahi, pero cuando pongo el codigo no se por que me sale error, que tendria de mal este codigo:
Código PHP:
Ver original
  1. preg_replace("#[\\n\\r]{2,}#\",\"\\n\",$txt)
  #4 (permalink)  
Antiguo 01/12/2012, 10:41
 
Fecha de Ingreso: noviembre-2012
Mensajes: 66
Antigüedad: 12 años
Puntos: 10
Respuesta: Eliminar dobles saltos de linea

No uses eregi_replace usa preg_replace y te funcionará...

SI te fijas use preg_replace en la función...

Te deberia de funcionar

Salu2 ;)
  #5 (permalink)  
Antiguo 01/12/2012, 10:55
Avatar de jonni09lo
Colaborador
 
Fecha de Ingreso: septiembre-2011
Ubicación: Estigia
Mensajes: 1.471
Antigüedad: 13 años, 3 meses
Puntos: 397
Respuesta: Eliminar dobles saltos de linea

Cita:
Iniciado por jmdearpe Ver Mensaje
No uses eregi_replace usa preg_replace y te funcionará...

SI te fijas use preg_replace en la función...

Te deberia de funcionar

Salu2 ;)
@fido-strike la razon de no usar eregi_replace es porque desde la version 5.3 de php ha quedado obsoleta eregi-replace

Saludos
__________________
Haz preguntas inteligentes-Como ser Hacker
No hacer preguntas por mensaje privado. No sólo no es inteligente sino que es egoísta.
  #6 (permalink)  
Antiguo 01/12/2012, 11:10
 
Fecha de Ingreso: noviembre-2008
Ubicación: Cochabamba Bolivia
Mensajes: 519
Antigüedad: 16 años
Puntos: 26
Respuesta: Eliminar dobles saltos de linea

Cita:
Iniciado por jmdearpe Ver Mensaje
No uses eregi_replace usa preg_replace y te funcionará...

SI te fijas use preg_replace en la función...

Te deberia de funcionar

Salu2 ;)
ni con lo uno ni con lo otro, no logro conseguir que se eliminen, tendra algo que ver que antes de guardar la cadena en la base de datos haya usado nl2br()?

Código PHP:
Ver original
  1. $descripcion = nl2br(strip_tags($posts[descripcion]));
  2. //despues procedo a guadar en mysql.
imaginemos que no uso nl2br y solo se guadaria los saltos dobles sin el Br de html, ¿se podria optar por alguna otra opcion para borrar?
  #7 (permalink)  
Antiguo 01/12/2012, 12:44
 
Fecha de Ingreso: noviembre-2012
Mensajes: 66
Antigüedad: 12 años
Puntos: 10
Respuesta: Eliminar dobles saltos de linea

Hola, pues a mi si me funciona, he probado con el código que tu pusiste al principio y va de lujo, pruébalo y verás...
Código PHP:
<?php

function QuitarDoblesSaltos($string){
    
$patron "#(<br />((\n)*))+#";//Patrón de búsqueda, que mediante expresión regular busca varios saltos seguidos
    
$sustituto "<br />";//sustituye por un solo salto
    
$cadenasalida=preg_replace ($patron,$sustituto,$string);
 
        return 
$cadenasalida;
    }
$txt1 "El gato<br /><br /><br /><br /><br />que esta triste y azul"// BRs (saltos de linea) en la misma linea
$txt2 "El gato<br />
<br />
<br />
<br />
<br />que esta triste y azul<br /><br />"
;  // BRs (saltos de linea)  en cada linea.
 

echo   QuitarDoblesSaltos($txt1)  ."<hr />";
echo   
QuitarDoblesSaltos($txt2)  ."<hr />";
?>
Mi recomendación es que pases la función antes de hacer un insert en la base de datos y ya está.

Asi si hay más de dos <br /> seguidos haya o no haya salto de linea (\n) entre ellos en db solo se te guardará uno.

El código lo he probado y funciona, te funciona a ti este código que he puesto?

Es que me extraña que digas que no funciona porque lo he probado dos veces.

Un saludo
  #8 (permalink)  
Antiguo 01/12/2012, 12:55
 
Fecha de Ingreso: noviembre-2012
Mensajes: 66
Antigüedad: 12 años
Puntos: 10
Respuesta: Eliminar dobles saltos de linea

Y tb me funciona pasando antes un nl2br
Código PHP:
<?php

function QuitarDoblesSaltos($string){
    
$patron "#(<br />((\n)*))+#";//Patrón de búsqueda, que mediante expresión regular busca varios saltos seguidos
    
$sustituto "<br />";//sustituye por un solo salto
    
$cadenasalida=preg_replace ($patron,$sustituto,$string);
 
        return 
$cadenasalida;
    }
$txt1 "El gato<br /><br /><br /><br /><br />que esta triste y azul"// BRs (saltos de linea) en la misma linea
$txt2 nl2br("El gato<br />



que esta triste y azul<br /><br />"
);  // BRs (saltos de linea)  en cada linea.
 
echo   QuitarDoblesSaltos($txt1)  ."<hr />";
echo   
QuitarDoblesSaltos($txt2)  ."<hr />";

?>
Salu2 ;)
  #9 (permalink)  
Antiguo 01/12/2012, 12:57
alvaro_trewhela
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Eliminar dobles saltos de linea

hay una forma nativa de hacerlo

$str = ""; //tu string con doble saltos y demases
while(strpos($str, "<br /><br />") !== false){
$str = str_replace("<br /><br />", "<br />", $str);
}

Última edición por alvaro_trewhela; 01/12/2012 a las 13:11
  #10 (permalink)  
Antiguo 01/12/2012, 13:25
 
Fecha de Ingreso: noviembre-2012
Mensajes: 66
Antigüedad: 12 años
Puntos: 10
Respuesta: Eliminar dobles saltos de linea

Esa forma nativa no funciona porque quiere que sustituya dos <br /> consecutivos aún en caso de que haya un salto de línea entre ellos...

Salu2 ;)
  #11 (permalink)  
Antiguo 01/12/2012, 14:22
 
Fecha de Ingreso: noviembre-2008
Ubicación: Cochabamba Bolivia
Mensajes: 519
Antigüedad: 16 años
Puntos: 26
Respuesta: Eliminar dobles saltos de linea

Dios!!!! ya no se que hacer, es que no entiendo por que a mi nop me va, este es el codigo donde meto a la base de datos:
Código PHP:
Ver original
  1. $posts = array("descripcion" => $_POST['descripcion']);
  2. $descripcion = nl2br(strip_tags($posts['descripcion']));
  3.  
  4. $sqlDaItem = mysql_query("INSERT INTO clasi_t_item_description (fk_i_item_id,fk_c_locale_code,s_title,s_description) VALUES ('$id_item','$codigo_local','$titulo','$descripcion')");

Y este es el include donde esta la función, fíjese que he intentado con varias pero no me va:

Código PHP:
Ver original
  1. function QuitarDoblesSaltos($string){
  2.     $patron = "#(<br />((\n)*))+#";//Patrón de búsqueda, que mediante expresión regular busca varios saltos seguidos
  3.     $sustituto = "<br />";//sustituye por un solo salto
  4.     $cadenasalida = preg_replace($patron,$sustituto,$string);
  5.         return $cadenasalida;
  6.     }
  7. function Parraf2Line($string)
  8. {  
  9.     $line = eregi_replace("(<br />)+","<br />",$string);
  10.     return $line;
  11. }
  12. function fun_eliminarDobleEspacios($cadena)
  13. {
  14.     $limpia    = "";
  15.     $parts    = array();
  16.      
  17.     // divido la cadena con todos los espacios q haya
  18.     $parts = split(" ",$cadena);
  19.      
  20.     foreach($parts as $subcadena)
  21.     {
  22.         // de cada subcadena elimino sus espacios a los lados
  23.         $subcadena = trim($subcadena);
  24.          
  25.         // luego lo vuelvo a unir con un espacio para formar la nueva cadena limpia
  26.         // omitir los que sean unicamente espacios en blanco
  27.         if($subcadena!="")
  28.         { $limpia .= $subcadena." "; }
  29.     }
  30.     $limpia = trim($limpia);
  31.      
  32.     return $limpia;
  33. }

incluso he intentado con la sugerencia de alvaro_trewhela, pero ni eso, ya desde ayer en la noche que intento y no logro nada, GRRRRRR......!!

Ya no se que hacer, que alguien me ilumine por favor, un dia entero perdido dando vueltas e intentado de una y otra
  #12 (permalink)  
Antiguo 01/12/2012, 14:43
 
Fecha de Ingreso: noviembre-2012
Mensajes: 66
Antigüedad: 12 años
Puntos: 10
Respuesta: Eliminar dobles saltos de linea

Hola, pero una cosa, antes de insertar en mysql usas nl2br y lo que pretendes es prescindir de esos saltos ya al recoger de la base de datos no?

prueba a ver de meter tb un \r pero no sé

Código PHP:
function QuitarDoblesSaltos($string){
    
$patron "#(<br />((\r)*)((\n)*))+#";//Patrón de búsqueda, que mediante expresión regular busca varios saltos seguidos
    
$sustituto "<br />";//sustituye por un solo salto
    
$cadenasalida=preg_replace ($patron,$sustituto,$string);
         return 
$cadenasalida;
    } 
Mira te pongo una direccion de prueba para que vas que lo he probado y todo... si miras el codigo html verás que funciona :S http://3wservicios.com/juan/ddd.php

Siento que no te vaya saludos
  #13 (permalink)  
Antiguo 01/12/2012, 14:51
 
Fecha de Ingreso: noviembre-2008
Ubicación: Cochabamba Bolivia
Mensajes: 519
Antigüedad: 16 años
Puntos: 26
Respuesta: Eliminar dobles saltos de linea

Cita:
Iniciado por jmdearpe Ver Mensaje
Mira te pongo una direccion de prueba para que vas que lo he probado y todo... si miras el codigo html verás que funciona :S http://3wservicios.com/juan/ddd.php

Siento que no te vaya saludos
De verdad, que he intentado usando nl2br() al sacar de la BD, al meter a la BD, he usado funciones antes de insertar, al sacar de la BD e imprimir y nada.


@jmdearpe yo tambien he hecho la prueba en otra pagina: anunciofrezco.com/tema/probando.php

ahi si me funciona, esto me lleva a la conclusion de que la funciona si va bien con un string escrito en la misma pagina donde esta la funcion pero no va con un string que es enviado por POST. la pregunta es ¿POR QUEeeeeeee.........?
  #14 (permalink)  
Antiguo 01/12/2012, 14:56
 
Fecha de Ingreso: noviembre-2008
Ubicación: Cochabamba Bolivia
Mensajes: 519
Antigüedad: 16 años
Puntos: 26
Respuesta: Eliminar dobles saltos de linea

Cita:
Iniciado por jmdearpe Ver Mensaje
Mira te pongo una direccion de prueba para que vas que lo he probado y todo... si miras el codigo html verás que funciona :S http://3wservicios.com/juan/ddd.php

Siento que no te vaya saludos

YA ESTA!!!!!!!!!! Gracias por tu sugerencia man, de verdad me haz sacado de este pozo.
la idea de poner \r funciono.

UN DIA TRABAJADO para solo esto
  #15 (permalink)  
Antiguo 01/12/2012, 15:10
 
Fecha de Ingreso: noviembre-2012
Mensajes: 66
Antigüedad: 12 años
Puntos: 10
Respuesta: Eliminar dobles saltos de linea

Menos mal, mira el lado bueno, para otra vez ya lo sabemos :)

Salu2 ;)

Etiquetas: dobles, html, mysql, saltos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 02:35.