Horde Text_Diff er et fantastisk redskab når du skal finde forskellen mellem 2 tekster og præsentere det.
Installation på Ubuntu 20.04
1 2 3 4 5 |
apt install php-pear pear channel-discover pear.horde.org pear install horde/horde_text_diff |
Herefter findes filerne under /usr/share/php/Horde
Brug af Text_Diff
Jeg illustrerer her hvordan du bruger Text_Diff ved hjælp af en php funktion:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
function diff_render($txt1,$txt2,$style) { //Hvis txt1 er tom returner da blot txt2 if (!isset($txt1) || strlen($txt1) == 0) { return $txt2; } //Hvis txt2 er tom, returner den if (!isset($txt2) || strlen($txt2) == 0) { return $txt2; } //Hvis der ingen forskel er på de to tekster, returnér if ($txt1 == $txt2) { return $txt2; } //Inkluder horde filerne //(Det kan sikkert gøres smartere med noget autoload) require "Horde/Text/Diff.php"; require "Horde/Text/Diff/Op/Base.php"; require "Horde/Text/Diff/Renderer.php"; require "Horde/Text/Diff/Renderer/Inline.php"; require "Horde/Text/Diff/Engine/Native.php"; require "Horde/Text/Diff/Op/Copy.php"; require "Horde/Text/Diff/Op/Change.php"; require "Horde/Text/Diff/Op/Delete.php"; require "Horde/Text/Diff/Op/Add.php"; require "Horde/String.php"; $txt1Ary = explode("\n",$txt1); $txt2Ary = explode("\n",$txt2); //Udfør diff $diff = new Horde_Text_Diff('auto',array($txt1Ary, $txt2Ary)); //Formater med html $renderer = new Horde_Text_Diff_Renderer_inline(array('ins_prefix' => '<span style="'.$style.'">','ins_suffix' => '</span>')); //Returner det endelige resultat return $renderer->render($diff); } |
Du bestemmer selv hvordan det skal formateres. Som standard vil Horde_Text_Diff_Renderer omslutte indsat tekst med <ins></ins> og fjernet text med <del></del>.
I ovenstående funktion har jeg valgt at overskrive ins fordi jeg gerne vil farve indsat kode rød. Jeg ville i så fald bruge min diff_render funktion således:
1 2 3 4 5 |
$text1 "Rigtig glædelig jul og godt nytår" $text2 "Du ønskes glædelig jul og godt nytår" diff_render($text1,$text2,"color:red"); |
Og resultatet ville blive:
Du ønskes Rigtig glædelig jul og godt nytår