3

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

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

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

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

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

4

4 回答 4

10

选项:

Stackoverflow 存档:

于 2009-07-14T13:07:03.733 回答
3

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

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

你可以在这里找到它:php diff example

于 2009-07-14T13:08:34.733 回答
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 下方的所有数据。

奇迹般有效!

于 2015-07-15T14:22:04.773 回答
2

不确定,为什么会有这些长解决方案。在这里,我找到了一个对我来说很容易的。

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);

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

于 2018-05-15T11:19:02.947 回答