如何突出显示另一个文本段落中的更改/差异?

时间:2009-07-14 13:04:53

标签: php javascript mysql css highlighting

是否可以突出显示另一个文本段落中的修改?

例如,数据库中有3个文本字段。非管理员用户可以编辑文本并提交审批。当管理员登录时,他可以打开批准页面,并显示原始文本和用户提交的文本以及修改。通常这些修改本质上非常小,如拼写纠正或只删除或添加句子。

是否可以通过突出显示修改(来自原始文本)的方式呈现,以便管理员用户在批准之前不必检查每个字段和每一行?

任何帮助将不胜感激。 感谢。

更新: 有点类似于TortoiseSVN的代码更改突出显示。

4 个答案:

答案 0 :(得分:9)

答案 1 :(得分:3)

如果您熟悉GNU / Linux工具,您可能熟悉`diff'工具。

有人编写了一个功能齐全的差异来比较php中的文件/字符串。

您可以在此处找到它:php diff example

答案 2 :(得分:2)

这是一个老话题,但我认为我对我的发现进行了编目。

如果您想使用原始php,这是迄今为止我发现的最简单,最快速,最有效的解决方案:http://paulbutler.org/archives/a-simple-diff-algorithm-in-php/

据我所知,上述代码的作者正在使用本文中概述的算法:http://www.codeproject.com/Articles/6943/A-Generic-Reusable-Diff-Algorithm-in-C-II

发生了什么的基本描述(取自文章):

  • 查找项目的当前最长匹配序列(LMS)。
  • 将此LMS存储在结果堆中。
  • 使用递归处理LMS上方的所有数据。
  • 使用递归处理LMS下面的所有数据。

像魅力一样!

答案 3 :(得分:1)

不确定,为什么这些长期解决方案存在。 在这里,我找到了一个简单的方法。

string1 = "The quick brown fox jumps over the lazy dog.";
$string2 = "The quick brown albino fox jumps the groovy dog.";

$string1 = explode(" ", $string1);
$string2 = explode(" ", $string2);

$diff = array_intersect($string2, $string1);

$tmp = array();
foreach ($string2 as $k => $w) {
         if ($diff[$k]==$w) {
             $tmp[$k] = $w;
         }
         else {
               $tmp[$k] = "<b>$w</b>";
         }
}
$diff = array_diff($string1, $tmp);

foreach ($diff as $k => $w) {
         $tmp[$k] .= " [<strike>$w</strike>]";
}

echo join (' ', $tmp);

REF。 https://forums.phpfreaks.com/topic/6525-how-do-i-highlight-differences-between-strings/