Для выполнения задания не существует стандартной библиотечной функции. В мире Open Source должно быть большое количество реализаций - практически любая программа, которая должна иметь дело с HTML, будет иметь один.
Есть два аспекта проблемы:
- Нахождение HTML сущности в исходной строке.
- Вставьте соответствующий заменяющий текст на свое место.
Поскольку кратчайший возможный объект равен '& x;' (но, AFAIK, все они используют по крайней мере 2 символа между амперсандом и точкой с запятой), вы всегда будете сокращать строку, поскольку максимально возможное представление символа UTF-8 равно 4 байтам. Следовательно, можно безопасно редактировать in situ.
Есть иллюстрация декодирования сущности HTML в 'The Practice of Programming' от Kernighan и Pike, хотя это делается несколько «мимоходом». Они используют токенизатор для распознавания объекта и отсортированную таблицу имен сущностей плюс значение замены, чтобы они могли использовать двоичный поиск для идентификации замен. Это необходимо только для имен неалгоритмических сущностей. Для объектов, закодированных как '& # x00DF;', вы используете алгоритмический метод их декодирования.
Просьба уточнить. У вас есть html в виде одной строки или вы читаете ее один за другим из потока? – qrdl