代码之家  ›  专栏  ›  技术社区  ›  TigerTiger

如何突出一个文本段落与另一个段落的变化/差异?

  •  3
  • TigerTiger  · 技术社区  · 17 年前

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

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

    谢谢。

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

    4 回复  |  直到 17 年前
        2
  •  3
  •   Ryan Li    17 年前

    如果你熟悉GNU/Linux工具,你可能熟悉“diff”工具。

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

        3
  •  2
  •   ethan    11 年前

    这是一条古老的线索,但我想把我的发现编目。

    如果你想使用原始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下方留下的所有数据。

        4
  •  2
  •   bhaveshkac    8 年前

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

    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/