lolli42/finediff
Create HTML diffs between two strings with fine-grained character or word comparison. Outputs / markup, escapes HTML entities, supports multibyte strings, and exposes internal opcodes for diff processing. PHP 8.2+ in v1.1.
FineDiff is a rather simple library to create HTML diff view of two strings:
echo (new Diff())->render('hello world', 'hello2 worlds');
hello<ins>2</ins> world<ins>s</ins>
$ composer req lolli42/finediff
Render the difference between two strings as HTML on a character basis:
echo (new Diff())->render('string one', 'string two');
string <ins>tw</ins>o<del>ne</del>
Render the difference between two strings as HTML on a word basis:
echo (new Diff(new Word()))->render('string one', 'string two');
string <del>one</del><ins>two</ins>
Special characters and entities are quoted by HTML renderer and multibyte strings are handled:
echo (new Diff())->render('foo<bär>baz', 'foo<qüx>baz');
foo<<del>bär</del><ins>qüx</ins>>baz
To create a diff-view between two string, an intermediate "Opcode" representation is created that specifies the differences form string one to string two. The renderer then takes this opcode and creates HTML from it. Note the opcode string is considered internal and may change in a backwards breaking way with younger library releases.
$diff = new Diff();
echo $diff->getOpcodes('hello world', 'hello2 worlds');
// c5i:2c6i:s
// Means: copy 5 chars "hello", then insert "2", then copy 6 chars " world", then insert "s"
echo $diff->process('hello wordl', 'c5i:2c6i:s');
// hello<ins>2</ins> world<ins>s</ins>
Full test run:
$ composer update
$ vendor/bin/phpunit
Restricting to single files:
$ composer update
$ vendor/bin/phpunit tests/DiffTest.php
Casual setup to run tests with xdebug (3.x) enabled, an IDE like phpstorm should then break point:
$ composer update
$ XDEBUG_MODE="debug,develop" XDEBUG_TRIGGER="foo" vendor/bin/phpunit
MIT License. See LICENSE file.
How can I help you explore Laravel packages today?