Tronquer un texte contenant du code HTML, en ignorant les tags

Je veux tronquer du texte (chargé à partir d'une base de données ou un fichier texte), mais il contient du HTML donc, en conséquence, les balises sont incluses et moins de texte sera renvoyé. Ceci peut causer des balises n'étant pas fermé ou partiellement fermé (si propre peut ne pas fonctionner correctement et il y a encore moins de contenu). Comment puis-je tronquer sur la base du texte (et probablement de s'arrêter lorsque vous arrivez à une table car cela pourrait causer plus de problèmes complexes).

substr("Hello, my <strong>name</strong> is <em>Sam</em>. I&acute;m a web developer.",0,26)."..."

Dans

Hello, my <strong>name</st...

Ce que je veux c'est:

Hello, my <strong>name</strong> is <em>Sam</em>. I&acute;m...

Comment puis-je faire cela?

Alors ma question est comment le faire en PHP, il serait bon de savoir comment le faire en C#... soit devrait être OK car je pense que je serais capable de port la méthode plus (sauf si c'est un construit dans la méthode).

Note aussi que j'ai inclus une entité HTML &acute; - ce qui serait considéré comme un seul caractère (au lieu de 7 caractères, comme dans cet exemple).

strip_tags est une solution de secours, mais je voudrais perdre la mise en forme et de liens, et il aurait toujours le problème avec les entités HTML.

OriginalL'auteur SamWM | 2009-07-28