如何在PHP中进行wiki / wordpress样式比较/差异?

时间:2011-06-07 09:45:04

标签: php diff

有点像这样来自WordPress:Wordpress diff

或者来自MediaWiki:Wikipedia diff

我在PHP中尝试了几个差异引擎,最全面的似乎是(http://www.raymondhill.net/finediff/viewdiff-ex.php)和PEAR的Text_Diff,但我似乎找不到任何选项让两个版本并排堆叠在一起上面的图像。我认为这比将两个版本合二为一,更容易阅读。

2 个答案:

答案 0 :(得分:5)

找到了解决方案 - 从WordPress(wp-includes / wp-diff.php)中获取与PEAR Text_Diff结合使用的WP_Text_Diff_Renderer_Table类:

$diff = new Text_Diff('auto', array($lines1, $lines2));
$render = new WP_Text_Diff_Renderer_Table;
echo $render->render($diff);

当包含在标签中时,上面的代码产生与上述WordPress屏幕截图相同的HTML布局。样式有四个CSS规则:

  • .diff-deletedline - 改变的段落/行 源文本
  • .diff-addedline - 段落/行 在目的地改变了 文本
  • del - 改变了单个词 来自消息来源
  • ins - 单词是 目的地已更改

此处有更多详情:http://www.webdevguides.co.uk/php-2/wordpress-style-diff-in-php

答案 1 :(得分:3)

我是finediff.php的作者,你在帖子中提及。

使用PHP FineDiff类的解决方案非常简单:使用股票渲染器FineDiff :: renderDiffToHTMLFromOpcodes()获取差异的HTML字符串,而不是在两个不同的DIV中使用相同的结果字符串,每个都是适当的CSS样式,如此:

<?php
    ...
    $diff = FineDiff::getDiffOpcodes($fromText, $toText);
    $diffHTML = FineDiff::renderDiffToHTMLFromOpcodes($fromText, $diff);
    ?>
<div id="from"><?php echo $diffHTML; ?></div>
<div id="to"><?php echo $diffHTML; ?></div>

然后,只需要正确显示您想要的样式:

#from ins {display:none}
#to del {display:none}

编辑:第二个想法,我意识到你可能希望双方合适地锚定在一起,我的解决方案不会这样做。