If you want to be accurate about the number of words:
preg_split('/\b/', $text, $limit2+1). 2 because there are two word breaks for every word, and +1 to represent "the rest" of the string. If you do get $limit*2+1 pieces, then it means the original was more than $limit words long. Use array_pop() to get rid of it. Use join('', $pieces) to put the pieces back together again. Optionally append "..." if you popped.