插件窝 干货文章 PHP如何实现多个文本框内容的差异对比与高亮显示?

PHP如何实现多个文本框内容的差异对比与高亮显示?

diff 高亮 差异 text 214    来源:    2025-03-15

在PHP中实现多个文本框内容的差异对比与高亮显示,可以通过以下步骤来实现:

1. 获取文本框内容

首先,你需要从表单中获取多个文本框的内容。假设你有两个文本框,分别命名为 text1text2

$text1 = $_POST['text1'];
$text2 = $_POST['text2'];

2. 使用差异对比算法

PHP本身没有内置的差异对比函数,但你可以使用第三方库来实现。一个常用的库是 xdiff,它提供了差异对比的功能。

首先,确保你的PHP环境中安装了 xdiff 扩展。如果没有安装,可以通过以下命令安装:

sudo apt-get install php-xdiff

然后,你可以使用 xdiff_string_diff 函数来生成差异。

$diff = xdiff_string_diff($text1, $text2);

3. 高亮显示差异

xdiff_string_diff 函数生成的差异结果是一个字符串,其中包含了差异的行。你可以将这个字符串输出到HTML中,并使用CSS来高亮显示差异。

echo "<pre>" . htmlspecialchars($diff) . "</pre>";

为了高亮显示差异,你可以使用CSS来设置不同的样式。例如:

.diff-added {
    background-color: #ccffcc;
}

.diff-removed {
    background-color: #ffcccc;
}

然后,你可以将差异结果中的 +- 行分别用 <span> 标签包裹,并应用相应的CSS类。

$diff = xdiff_string_diff($text1, $text2);
$diff = nl2br($diff); // 将换行符转换为 <br> 标签

// 高亮显示差异
$diff = preg_replace('/\+(.*?)\n/', '<span class="diff-added">+$1</span><br>', $diff);
$diff = preg_replace('/\-(.*?)\n/', '<span class="diff-removed">-$1</span><br>', $diff);

echo $diff;

4. 完整示例

以下是一个完整的示例代码:

<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    $text1 = $_POST['text1'];
    $text2 = $_POST['text2'];

    $diff = xdiff_string_diff($text1, $text2);
    $diff = nl2br($diff);

    // 高亮显示差异
    $diff = preg_replace('/\+(.*?)\n/', '<span class="diff-added">+$1</span><br>', $diff);
    $diff = preg_replace('/\-(.*?)\n/', '<span class="diff-removed">-$1</span><br>', $diff);

    echo $diff;
}
?>

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Text Diff</title>
    <style>
        .diff-added {
            background-color: #ccffcc;
        }

        .diff-removed {
            background-color: #ffcccc;
        }
    </style>
</head>
<body>
    <form method="post">
        <textarea name="text1" rows="10" cols="50"></textarea><br>
        <textarea name="text2" rows="10" cols="50"></textarea><br>
        <input type="submit" value="Compare">
    </form>
</body>
</html>

5. 其他注意事项

  • 如果你需要对比更多的文本框内容,可以扩展上述代码,处理更多的输入。
  • 如果 xdiff 扩展不可用,你可以考虑使用其他差异对比库,或者手动实现简单的差异对比算法。

通过以上步骤,你可以在PHP中实现多个文本框内容的差异对比与高亮显示。