Обрезать текст, содержащий HTML, игнорируя теги

Я хочу обрезать некоторый текст (загруженный из базы данных или текстового файла), но он содержит HTML, поэтому в результате включаются теги и возвращается меньше текста. Это может привести к тому, что теги не будут закрыты или частично закрыты (поэтому Tidy может работать некорректно, а контента по-прежнему меньше). Как я могу усечь, основываясь на тексте (и, возможно, остановиться, когда вы доберетесь до таблицы, так как это может вызвать более сложные проблемы).

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

В результате:

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

Что бы я хотел, это:

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

Как я могу это сделать?

Хотя мой вопрос заключается в том, как сделать это в PHP, было бы хорошо узнать, как это сделать в C # ... либо все должно быть в порядке, так как я думаю, что я смог бы перенести метод поверх (если он не является встроенным в метод).

Также обратите внимание, что я включил HTML-сущность&acute; - который должен рассматриваться как один символ (а не 7 символов, как в этом примере).

strip_tags это запасной вариант, но я бы потерял форматирование и ссылки, и все равно возникла бы проблема с HTML-сущностями.

Ответы на вопрос(13)

Ваш ответ на вопрос