many ways of doing this...you could do a word count, minus the html tags and then output a set number of words or if the number of words is less than that then just output everything...
this is totally rough, as i did this a long time ago, but it has some things you could use for research en route to your own solution...basically is explodes your text, takes out some tags, reduces the words to 50, then gives you back the new text...
good luck...v
function reduceText($txt) {
// delete images
$preg = "'<img(.?)>|<IMG(.?)>'";
$txt = preg_replace($preg, " ", $txt);
// take out links
$preg = "'<a(.?)>|<A(.?)>'";
$txt = preg_replace($preg, " ", $txt);
$preg = "'</a>|</A>'";
$txt = preg_replace($preg, " ", $txt);
// reduce number of words for page
$txt = explode(" ", $txt);
$txt = array_slice($txt, 0, 50);
$txt = implode(" ", $txt);
$s = "$txt...\n";
return $s;
}