有点像这样来自WordPress:
或者来自MediaWiki:
我在PHP中尝试了几个差异引擎,最全面的似乎是(http://www.raymondhill.net/finediff/viewdiff-ex.php)和PEAR的Text_Diff,但我似乎找不到任何选项让两个版本并排堆叠在一起上面的图像。我认为这比将两个版本合二为一,更容易阅读。
答案 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规则:
此处有更多详情: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}
编辑:第二个想法,我意识到你可能希望双方合适地锚定在一起,我的解决方案不会这样做。