2

我正在尝试比较两个都包含 HTML 的 PHP 字符串。(它们都通过所见即所得的编辑器放入数据库中)。

我想要得到的结果是看看哪些词被删除了,哪些词被添加了。

为此,我使用如下代码:

$old = "<p>Lorem ipsum is standard dummy text</p>";
$new = "<p>Lorem ipsum was standard dummy jibbrish</p>";
echo htmlDiff($old, $new);

效果很好。但是,当我添加一些标签时<li>,乐趣就结束了。

例如,如果我有以下内容:

$old = "<p>Lorem ipsum is standard dummy text. <ul><li>Lorem</li><li>Ipsum</li><li>Dolor</li></ul></p>";

$new = "<p>Lorem ipsum was standard dummy jibbrish. <ul><li>Lorem</li><li>Dolor</li></ul></p>";

echo htmlDiff($old, $new);

标签在第<del>一个列表项之后被正确添加,但被删除的列表项被放置在<del>标签之外,使它看起来像没有被删除。

我可以通过剥离所有标签来解决这个问题,但我想保留两个字符串的布局。

非常感谢任何帮助或建议。

4

1 回答 1

4

您可以尝试以下 htmlDiff 函数的替代方法之一:

  1. PHP inline diff迷你库产生这样的结果
  2. Horde_Text_Diff
  3. xdiff扩展中的xdiff_string_diff函数
于 2013-03-21T19:33:30.850 回答