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

Php 如何突出显示一个文本段落与另一个文本段落的更改/差异?,php,javascript,mysql,css,highlighting,Php,Javascript,Mysql,Css,Highlighting,是否可以突出显示一个文本段落与另一个文本段落中的修改 例如,数据库中有3个文本字段。非管理员用户可以编辑文本并提交审批。当管理员登录时,他可以打开approvals页面,显示原始文本和用户提交的文本,并进行修改。通常,这些修改在本质上是非常小的,比如拼写更正或只是删除或添加一个句子 它是否可以以这样一种方式呈现,即突出显示修改(来自原始文本),以便管理员用户在批准之前不必检查每个字段和每一行 任何帮助都将不胜感激。 谢谢 更新: 有些类似于OrtoiseSVN的代码更改突出显示。选项: (使用

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

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

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

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

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

选项:

  • (使用PEAR文本差异)
Stackoverflow存档:


如果您熟悉GNU/Linux工具,您可能会熟悉“diff”工具

有人编写了一个功能齐全的diff,用于在php中比较文件/字符串


你可以在这里找到:。

这是一条旧线索,但我想我会把我的发现分类

如果您想使用原始php,这是迄今为止我发现的最简单、最快、最有效的解决方案:

据我所知,上述代码的作者正在使用本文概述的算法:

对正在发生的事情的基本描述(摘自文章):

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

工作起来很有魅力

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

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);
string1=“敏捷的棕色狐狸跳过懒惰的狗。”;
$string2=“敏捷的棕色白化病狐狸跳过了一条时髦的狗。”;
$string1=分解(“,$string1”);
$string2=分解(“,$string2”);
$diff=array_intersect($string2,$string1);
$tmp=array();
foreach($string2为$k=>$w){
如果($diff[$k]=$w){
$tmp[$k]=$w;
}
否则{
$tmp[$k]=“$w”;
}
}
$diff=array_diff($string1,$tmp);
foreach($k=>w){
$tmp[$k]。=“[$w]”;
}
回声连接(“”,$tmp);

参考

mmmm。。不确定它是否也亮了