Может кому-то тоже понадобится.
Сделал на:
https://github.com/gorhill/PHP-FineDiff
Для работы с HTML нужно включить "wordGranularity", вставить пробелы после и перед тэгами, и при выводе прогнать через htmlspecialchars_decode($rendertext), чтобы тэги отобразились не текстом.
<?php
include $_SERVER['DOCUMENT_ROOT'] . '/assets/components/fineDiff/finediff.php';
$original_text = str_replace('>' , '> ', $original_text);
$original_text = str_replace('<' , ' <', $original_text);
$changed_text = str_replace('>' , '> ', $changed_text);
$changed_text = str_replace('<' , ' <', $changed_text);
$opcodes = FineDiff::getDiffOpcodes($original_text, $changed_text, FineDiff::$wordGranularity);
$rendertext = FineDiff::renderDiffToHTMLFromOpcodes($original_text, $opcodes);
return htmlspecialchars_decode($rendertext);