He aquí una función modificada de otro he encontrado en Internet; elimina cualquier HTML y primero limpia algunos caracteres funky MS; luego agrega un carácter elíptico opcional al contenido para mostrar que se ha acortado. Se divide correctamente en una palabra, por lo que no tendrá caracteres aparentemente aleatorios;
/**
* Function to ellipse-ify text to a specific length
*
* @param string $text The text to be ellipsified
* @param int $max The maximum number of characters (to the word) that should be allowed
* @param string $append The text to append to $text
* @return string The shortened text
* @author Brenley Dueck
* @link http://www.brenelz.com/blog/2008/12/14/creating-an-ellipsis-in-php/
*/
function ellipsis($text, $max=100, $append='…') {
if (strlen($text) <= $max) return $text;
$replacements = array(
'|<br /><br />|' => ' ',
'| |' => ' ',
'|’|' => '\'',
'|‘|' => '\'',
'|“|' => '"',
'|”|' => '"',
);
$patterns = array_keys($replacements);
$replacements = array_values($replacements);
$text = preg_replace($patterns, $replacements, $text); // convert double newlines to spaces
$text = strip_tags($text); // remove any html. we *only* want text
$out = substr($text, 0, $max);
if (strpos($text, ' ') === false) return $out.$append;
return preg_replace('/(\W)&(\W)/', '$1&$2', (preg_replace('/\W+$/', ' ', preg_replace('/\w+$/', '', $out)))) . $append;
}
de entrada:
<p class="body">The latest grocery news is that the Kroger Co. is testing a new self-checkout technology. My question is: What’s in it for me?</p> <p>Kroger said the system, from Fujitsu,
Salida:
The latest grocery news is that the Kroger Co. is testing a new self-checkout technology. My question is: What's in it for me? Kroger said the …
¿Qué es un cantar? –
* (relacionado) * [Truncar una cadena multibyte a n caracteres] (http://stackoverflow.com/questions/2154220/truncate-a-multibyte-string-to-n-chars). La solución allí corta con respecto a los límites de palabras. Es un duplicado si no te importan las oraciones, solo palabras. – Gordon
posible duplicar: http://stackoverflow.com/questions/79960/how-to-truncate-a-string-in-php-to-the-word-closest-to-a-certain-number-of-charac – jasonbar