Función PHP para truncar texto sin cortar palabras

Cuando manejamos cadenas de texto muy grandes, que exceden del espacio que tenemos reservado para mostrarlas (por ejemplo cuando queremos poner un resumen de un post en portada), se hace muy útil contar con una función en PHP como la que os mostramos a continuación, que permite coger una cadena dada y cortarla al tamaño que le indiquemos sin dejar palabras a medias:

<?php
// Original PHP code by Chirp Internet: www.chirp.com.au
// Please acknowledge use of this code by including this header.

function myTruncate($string, $limit, $break=».», $pad=»…») {
// return with no change if string is shorter than $limit

if(strlen($string) <= $limit)
return $string;

// is $break present between $limit and the end of the string?

if(false !== ($breakpoint = strpos($string, $break, $limit))) {
if($breakpoint < strlen($string) – 1) {
$string = substr($string, 0, $breakpoint) . $pad;
}
}
return $string;
}

?>

La llamada a la función se hace de la siguiente manera:

myTruncate($cadena, $long_min, $cadena_corte, $coletilla)

Donde $cadena representa la cadena de texto que queremos «resumir» sin cortarla indebidamente (sin dejar palabras a medias), $long_min es un entero que indica la longitud mínima que debe tener la nueva cadena, $cadena_corte es la cadena que indica el corte (lo típico es un espacio en blanco), y $coletilla es el texto que se colocará al final de la cadena devuelta.

Veamos su uso en un ejemplo:

$cadena = ‘Don Quijote de la Mancha es una novela escrita por el español Miguel de Cervantes Saavedra. Publicada su primera parte con el título de El ingenioso hidalgo don Quixote de la Mancha a comienzos de 1605, es una de las obras más destacadas de la literatura española y la literatura universal, y una de las más traducidas. En 1615 aparecería la segunda parte del Quijote de Cervantes con el título de El ingenioso caballero don Quixote de la Mancha.’;

myTruncate($cadena, 20, ‘ ‘, ‘…’);

Nos devuelve:

«Don Quijote de la Mancha…»