substr c'est merdique si la chaine inclue un balisage HTML.
Sauf si on utilise strip_tags avant mais on perd de ce fait, tout le balisage du texte.
le mieux c'est de créer un fonction qui conserve le code html et d'y inclure un compteur de mots. Après, on lui ajoute une fonction pour définir les éléments doivent être conservés (image, liens, blockquote, etc...) et ceux qui doivent disparaitre.