Я не знаю ни одной библиотеки, но она не должна быть такой сложной (на 80%).
Вам нужен только простой «парсер», который понимает 4 типа токенов:
- открывающие теги - все, что начинается с
<
, но не </
и заканчивается >
, но не />
- закрывающие теги - все, что начинается с
</
и заканчивается >
- самозакрывающиеся теги (например,
<br/>
) - все, что начинается с <
, но не </
и заканчивается />
, но не >
- нормальный персонаж - все, что не относится к другим типам
Затем вы должны пройти через введенную строку и сосчитать «нормальные символы». Идя вдоль строки и считая, вы копируете каждый токен на выход, пока подсчитанные нормальные символы меньше или равны сумме, которую вы хотите получить.
Вам также нужно создать стек текущих открытых тегов, пока вы ходите, думая о вводе. Каждый раз, когда вы проходите через «открывающий тег», вы помещаете его в стек (его имя), каждый раз, когда вы обнаруживаете закрывающий тег, вы удаляете самое верхнее имя тега из стека (возможно, ввод правильный XHTML).
Когда вы достигнете конца необходимого количества обычных символов, вам нужно будет только написать закрывающие теги HTML для имен тегов, оставшихся в стеке.
Но будьте осторожны, это работает только при правильном вводе XML.
Я не знаю, что вы хотите сделать с этим фрагментом кода, но вы должны обратить внимание на атаки с использованием HTML / JavaScript-инъекций.