INICIO

CORTAR TEXTO POR PALABRAS | TUTORIAL PHP

Muchas veces surge la necesidad de recortar un texto para que ocupe menos espacio. Quizás es un artículo y queremos mostrar la entradilla. O quizás es otra cosa. Pero el caso es que la típica función de substr() que corta cadenas no nos sirve.

Si estás leyendo esto ya sabes por qué no sirve.

Cómo cortar un texto por palabras

Vamos a hacerlo así.

function cortar_texto($str, $n) {
    $arr = preg_split("/[\s]+/",  $str, $n+1);
    $arr = array_slice($arr, 0, $n);
    return join(' ', $arr);
}

Explicación:

La función cortar texto toma dos parámetros: el texto y el número máximo de palabras que queremos tener.

La función preg_split recorta la cadena de texto allá donde se cumpla la expresión regular. En nuestro caso, la expresión regular coincide con los espacios blancos, que son los separadores de palabras. Genera una matriz, que recogemos en la variable $arr, que tiene n+1 trozos. El último trozo contiene todo el resto de la cadena. A nosotros nos interesan los n primeros trozos.

Luego, la función array_slice toma un intervalo de elementos de la matriz. En concreto todos los elementos desde el cero hasta n.

Esta parte podría ser sustituida por la función array_pop, que lo que hace es eliminar el último elemento de la matriz. Pero sólo nos sirve si estamos seguros de que nuestro texto es más largo que el límite que vamos a cortar, porque si no, estaríamos perdiendo una palabra extra en los textos cortos.

La función join genera una cadena de texto a partir de los elementos de una matriz, utilizando un separador definido. Esto es exactamente lo mismo que lo que hace la función implode. De hecho, la primera es un alias de la segunda.

Alternativa: con CSS

Cabe destacar la curiosidad de que con CSS también podemos recortar el texto sobrante, si lo que buscábamos es encuadrar la maquetación. Esto es muy útil para sitios que requieran un diseño responsive, que hoy en día, son todos.

<html>
<head>
<style> 
    article{
    width:200px;
    }
    section{
    height:30px; 
    overflow:hidden; 
    white-space:nowrap; 
    text-overflow:ellipsis;
    }
</style>
</head>
<body>
<article>
    <section>
    Este texto es ultra mega largo y necesitamos ocultar lo sobrante 
    porque si no se va a salir de su contenedor y eso no mola nada
    </section>
</article>
</body>
</html>

El resultado de esto es que el navegador imprime automáticamente los puntos suspensivos cuando sea necesario, y oculta el resto del texto.

Salud. Saludos.