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

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

高亮 差异 text htmlspecialchars 281    来源:    2025-03-13

在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函数生成的差异结果是一个字符串,其中包含了差异的行。你可以将这个字符串解析并高亮显示差异部分。

function highlightDiff($diff) {
    $lines = explode("\n", $diff);
    $output = '';

    foreach ($lines as $line) {
        if (strpos($line, '+') === 0) {
            $output .= '<span style="background-color: #ccffcc;">' . htmlspecialchars($line) . '</span><br>';
        } elseif (strpos($line, '-') === 0) {
            $output .= '<span style="background-color: #ffcccc;">' . htmlspecialchars($line) . '</span><br>';
        } else {
            $output .= htmlspecialchars($line) . '<br>';
        }
    }

    return $output;
}

$highlightedDiff = highlightDiff($diff);

4. 显示结果

最后,将高亮显示的差异结果输出到页面上。

echo $highlightedDiff;

完整代码示例

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

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

    function highlightDiff($diff) {
        $lines = explode("\n", $diff);
        $output = '';

        foreach ($lines as $line) {
            if (strpos($line, '+') === 0) {
                $output .= '<span style="background-color: #ccffcc;">' . htmlspecialchars($line) . '</span><br>';
            } elseif (strpos($line, '-') === 0) {
                $output .= '<span style="background-color: #ffcccc;">' . htmlspecialchars($line) . '</span><br>';
            } else {
                $output .= htmlspecialchars($line) . '<br>';
            }
        }

        return $output;
    }

    $highlightedDiff = highlightDiff($diff);
}
?>

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Text Diff</title>
</head>
<body>
    <form method="post">
        <textarea name="text1" rows="10" cols="50"><?php echo htmlspecialchars($text1 ?? ''); ?></textarea><br>
        <textarea name="text2" rows="10" cols="50"><?php echo htmlspecialchars($text2 ?? ''); ?></textarea><br>
        <input type="submit" value="Compare">
    </form>

    <?php if (isset($highlightedDiff)): ?>
        <h2>Differences:</h2>
        <div><?php echo $highlightedDiff; ?></div>
    <?php endif; ?>
</body>
</html>

解释

  • xdiff_string_diff 函数生成一个差异字符串,其中以 + 开头的行表示新增的内容,以 - 开头的行表示删除的内容。
  • highlightDiff 函数将差异字符串解析并高亮显示新增和删除的内容。
  • 最后,将高亮显示的差异结果输出到页面上。

注意事项

  • 确保你的PHP环境安装了xdiff扩展。
  • 如果文本内容较大,差异对比可能会消耗较多资源,建议对输入内容进行适当的限制或分块处理。

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