Я бы использовал HTML Purifier для тяжелой и важной работы.
Затем, чтобы получить отдельные слова, я бы разбил содержимое там, где есть пробел.
После этого вы можете захотеть использовать регулярное выражение, чтобы получить теги от начала и до конца строки.
А затем примените функцию strip_tags, чтобы удалить оставшиеся теги в середине слова.
Наконец, у вас есть «голое» слово, чтобы применить слово «замена». Если замена не требуется, вы можете легко остаться с оригинальной строкой. В противном случае ...
Далее вы можете вернуть начальный и конечный теги.
Если вы хотите вернуть теги посередине, вам нужно будет захватить их в фазе «strip_tags» (возможно, используя regex вместо strip_tags, или, возможно, сравнив результат strip_tags с исходной строкой, в этой фазе) , Вам нужно будет расположить эти теги после замененного слова или перед ним.
Соединение частей слова вместе - это еще одна легкая часть.