En réflechissant, je me suis dit qu'il y a une autre manière plus astucieuse que celle proposée plus haut de couper uniquement lorsqu'on arrive à un total de 0 balises ouvertes.
L'idée est de couper à l'endroit voulu, mais afin de ne pas rencontrer de problème de balises, l'idée est de faire, à l'endroit où on coupe : fermer toutes les balises qui étaient ouvertes (attention à respecter l'ordre), à couper l'article, puis à ré-ouvrir toutes les balises qu'on avait fermées précédement.
De cette manière on aurait un résultat du genre :
<h1>titre</h1>
<p>imaginons un texte rempli de balises qu'on coupe en plein milieu
<b>
<ul>
<li>ceci est un point X</li>
<li>ceci <i>est un point y</i></li>
</ul>
</b>
Nous donnera donc le résultat suivant :
<h1>titre</h1>
<p>imaginons un texte rempli de balises qu'on coupe en plein milieu
<b>
<ul>
<li>ceci est
</li></ul></b></p>
<p><b><ul><li>
un point X</li>
<li>ceci <i>est un point y</i></li>
</ul>
</b>
</p>
On voit évidement tout de suite dans mon exemple que ça peut poser un problème (j'ai fait exprès). C'est qu'on risque de couper au milieu d'une phrase ou au milieu d'un ensemble de balises qui faisaient un tout.
Je pense donc que pour bien traiter ce genre de cas, il faut établir des exceptions avec des balises qu'on ne peut pas couper en plein milieu. (typiquement les balises <li>, <ul>, <p>)
Mais j'irais même plus loin en disant qu'on ne peut couper qu'après quelques balises bien définies : </ul>, </p>, </code>, </bloquote>, ...
Ca me semble la meilleure manière de garder la consistance du texte.
Qu'en pensez-vous?