ProgramacionWeb - Ayuda al webmaster
No has iniciado sesión
Conectar al sistema | Registrar usuario
Categorías Articulo
 
13 votos
Cortar cadenas de texto
 
 
Vamos a ver cómo podemos cortar una cadena de texto para limitar su tamaño a un número determinado de caracter pero sin cortar palabras por la mitad como haríamos con substr

Para esto, lo que haremos será cortar la cadena de texto por todos los espacios y reconstruirla añadiendo palabras al final de la cadena siempre y cuando la cadena no vaya a exceder el tamaño limitado:
 
000 
001 
002 
003 
004 
005 
006 
007 
008 
009 
010 
011 
012 
013 
014 
015 
016 
017 
<?
 
// Inicializamos las variables
$tamano 50// tamaño máximo
$contador 0;
$texto 'Este es el texto que se cortará para que no ocupe más de 50 carácteres';
 
// Cortamos la cadena por los espacios
$arrayTexto split(' ',$texto);
$texto '';
 
// Reconstruimos la cadena
while($tamano >= strlen($texto) + strlen($arrayTexto[$contador])){
    
$texto .= ' '.$arrayTexto[$contador];
    
$contador++;
}
echo 
$texto;
?>
 
Las funciones que usamos para llevar a cabo esta tarea són split, funcion que corta una cadena dada a partir de otra cadena (en este caso un espacio) y introduce los recortes en un array, y strlen, que devuelve la longitud de una cadena dada.

Con este código, que podeis ejecutar aquí, conseguiremos un efecto que nos será muy útil para por ejemplo, vistas prévias de noticias y de mensajes del foro... pero tiene un pequeno problema, si la primera palabra de la cadena es mas larga que el tamaño máximo permitido la vista prévia sera vacía.

Para evitar esto podemos hacer esta comprovación antes del echo:
 
000 
001 
002 
<?
if($texto == '')$texto substr($arrayTexto[0],0,$tamano);
?>
 
Entonces si la primera palabra supera los 50 carácteres la cortará, y mostrará en la vista prévia los primeros 50 caracteres de la palabra.

Puedes encontrar este código en ASP en otro artículo publicado en programacionweb.net.
 
 
Comentarios
07/07/07 Comentario 649
Salu2 eloi!! cuanto tiempo sin pasarme por aqui... Esto ha mejorado mucho ;)

Bueno... php5 me salta algunas advertencias al procesar los arrays (no encuentra indices del array que se usa para separar el texto que se quiere cortar). Esto me sucede tanto con textos inferiores al tamaño maximo como superiores.

Me he calentado la cabeza buscando otros script por la web y al final he decidido hacer uno. Ahí va:
 
000 
001 
002 
003 
004 
005 
006 
007 
008 
009 
010 
011 
012 
013 
014 
015 
016 
017 
018 
019 
020 
<?
function cortarTexto($texto) {
 
    
$tamano 50// tamaño máximo
    
$textoFinal ''// Resultado
 
    // Si el numero de carateres del texto es menor que el tamaño maximo,
    // el tamaño maximo pasa a ser el del texto
    
if (strlen($texto) < $tamano) $tamano strlen($texto);
 
    for (
$i=0$i <= $tamano 1$i++) {
        
// Añadimos uno por uno cada caracter del texto
        // original al texto final, habiendo puesto
        // como limite la variable $tamano
        
$textoFinal .= $texto[$i];
    }
 
    
// devolvemos el texto final
    
return $textoFinal;
 
}
 
Para utilizarlo
 
000 
001 
002 
<?
echo cortarTexto("cadena de texto");
?>
 
Por lo que he ido probando me funciona bien pero no descarto que tenga algun fallo. Algo que destacar es que si la variable $tamano es demasiado elevada, del orden de miles, se ejecuta un bucle durante ese numero de veces. Un numero muy elevado podria suponer que el proceso se relentizara, "supongo que nunca de forma excesiva".

Un saludo.
27/05/09 Comentario 1222
echo "". substr($TEXTO_PAGINA,0,strrpos(substr($TEXTO_PAGINA,0,1020)," ")).""
30/06/10 Comentario 1522
$textorecortado=substr($view,0,strlen($textopararecortar)-$valordecaracteres);


 
Resolver dudas
Si tienes problemas o dudas con el contenido del artículo no dudes a preguntar en los foros de PHP de Programación Web indicando el artículo al que te refieres.