Fair enough.
I would probably search the chopped string for the last '<', to see if it is after the last '>'. If it is, then you've probably half chopped a html tag. e.g.
if(strlen($row['news']) > 200)
{
$news = substr($row['news'],0,200);
$news .= " <a href=\"/news/id=$row[id]\">... read more</a>";
}
// check if the last < is after the last >
if (strrpos($news, '<') > strrpos($news, '>')) {
// if so, chop off the bit from the last < onwards
$news = substr($news, 0, strrpos($news, '<'));
}
Another option would be to strip html tags from the string before you chop it? Then you wouldn't have any issue with half chopped tags...