Limitar los saltos de línea.

Resumen.

Cuando tenemos un formulario de contacto por poner un ejemplo muy común, es casi imprescindible un campo textarea (campo para introducir texto). Este tipo de campos puede ser mas o menos extenso, y cuando lo es, poder introducir en él saltos de línea es algo bastante conveniente, el problema se presenta cuando un usuario introduce más saltos de línea de los necesarios. Vamos a presentar una función para controlar precisamente esto.

Artículo.

Más de una vez hemos recibido a través de nuestro formulario de contacto o en los comentarios de nuestras publicaciones textos con abuso de saltos de línea. En muchos casos son textos sin sentido que sin mas, lo eliminamos y listo, pero en otros casos el usuario pretende llamar la atención sobre algo separando muchísimo las líneas de texto.

Esto se puede controlar de manera fácil con el uso de expresiones regulares y un poco de imaginación y maña. Pero también debemos tener otras cosas en cuenta, como que no entren otras etiquetas HTML, por ejemplo <p></p>, que nos permitiría introducir párrafos o las diferentes etiquetas <H> correspondientes a los títulos.

Para lograr todo esto vamos a dar una serie de pasos.

El primero consistirá en eliminar los saltos de línea \n y retornos de carro \r que pueden ser introducidos con PHP y el resultado lo tenemos en la variable $sin_saltos.

El segundo paso consiste en reemplazar los saltos de línea que el usuario haya podido escribir en el formulario en diferentes formas, unas son correctas y otras incorrectas, sustituyéndolas todas por la forma correcta. El resultado lo obtenemos en la variable $Saltos_okk.

El tercer paso es cambiar el salto de línea <br /> por un valor aleatorio, y al mismo tiempo, aplicar a esa sustitución la función strip_tags() para eliminar todas las posibles etiquetas. Una vez eliminadas, volvemos a sustituir el valor aleatorio por el salto de línea <br />. El resultado lo tenemos en la variable $saltos_ok.

En el cuarto y último paso, la variable $exp_rgl tomará la forma para permitir uno, dos o tres saltos de líneas, valor este que recibirá la función como parámetro. Según el valor, se ejecuta un condicional para cada caso, y mediante la función preg_replace() aplicamos la expresión regular.

Así, tenemos la siguiente función:
<?php // Permite entre 1 y 3 saltos de linea consecutivos. function Dup_SL2($texto,$Nsaltos){         // Eliminamos saltos de linea         $saltos = array(chr(13).chr(10), "\r\n""\n""\r");         $reemplazo = array('');         $sin_saltos str_ireplace($saltos,$reemplazo,$texto);     $ar_num = array('<br>','<br >','< br>','< br >','<br />','<br/>','< br/>','<br/ >','< br/ >','< br / >','</br>','< /br>','</ br>');    // Valores originales       $ar_let = array('<br />','<br />','<br />','<br />','<br />','<br />','<br />','<br />','<br />','<br />','<br />','<br />','<br />');   // Nuevos valores          $Saltos_okk str_ireplace($ar_num,$ar_let,$sin_saltos);             $ar_salto = array('<br />');             $ar_cambio = array('nBgf6YdrawQv7');         $Saltos_ok strip_tags(str_ireplace($ar_salto,$ar_cambio,$Saltos_okk));         $saltos_ok str_replace($ar_cambio,$ar_salto,$Saltos_ok);     if($Nsaltos == 1){         // Permite un solo salto de linea         $exp_rgl "/(<br \/>){1,500}/i";         $reemplazo '<br />'."\n";    // Permite 1 salto de linea     }elseif($Nsaltos == 2){         // Permite solo 2 saltos de linea         $exp_rgl "/(<br \/>)(<br \/>){1,500}/i";         $reemplazo '<br /><br />'."\n";    // 2 Saltos de linea     }elseif($Nsaltos 2){         // Permite solo 3 saltos de linea         $exp_rgl "/(<br \/>)(<br \/>)(<br \/>){1,500}/i";         $reemplazo '<br /><br /><br />'."\n";    // 3 Saltos de linea     }     $new_texto preg_replace($exp_rgl$reemplazo$saltos_ok);          return $new_texto;  } // Ejecutamos la funcion $texto '<h4><i>Esto podria ser un comentario en tu sitio web.</i></4> En este <b>texto</b> elimi nanos<br> saltos de linea cuando estos< br/> estan  duplicados.<BR><BR><br /><br /> <br /> <BR /> <BR /> <BR /> <br /> <br /><br />Lo que suele <H2>ser un problema</h2> cuando  algunos usuarios publican un <br>texto.< br/><br/><br/><br/ >< br/><br/><br/><br/ > Este codigo es  una mejora del codigo bla bla<br /> ya que permite uno, dos o <strong>3 saltos</strong> de linea  <BR /> <BR /> <BR /> enviado como parametro de la funcion <br /> <BR /> < /BR> <BR /> <br /> </ br> <h1>¿Que te parece el resultado? <p>Observa el codigo fuente</p></H1>'$num_saltos 2;    // Valores admitidos: 1, 2 y 3 $mi_texto Dup_SL2($texto$num_saltos); echo "$texto <hr> <hr> $mi_texto";   ?>
Y con esto, ya tenemos una función que nos permitirá, según nuestro criterio, introducir 1, 2 o 3 saltos de línea, no permitiendo la entrada de otras posibles etiquetas.

Esta misma función, aunque con modificaciones y otras cositas como la impresión de código fuente, esta aplicada al sistema de comentarios de este sitio Web.
Tags: Saltos línea || regular || str_replace || preg_replace

Comentarios.

Sin comentarios, publica el tuyo.