ssddanbrown / htmldiff
HTML 内容差异生成器
Requires
- php: >=7.2
- ext-mbstring: *
Requires (Dev)
- phpunit/phpunit: ^8.5|^9.5.9
- vimeo/psalm: ^4.10
README
此库将比较两个提供的HTML字符串输入,并输出标记有两者之间差异的HTML。
这是从此处找到的c#实现移植到PHP的版本,该实现是此处找到的ruby实现的移植。主要归功于@Rohland和@myobie的原始工作,我将它们简单地翻译成了PHP。
安装
您可以通过composer安装此包
composer require ssddanbrown/htmldiff
用法
此库提供了一个直接的静态函数,用于快速创建HTML差异
$diff = Ssddanbrown\HtmlDiff\Diff::excecute('<p>Hello there!</p>', '<p>Hi there!</p>'); // $diff = '<p><del class="diffmod">Hello</del><ins class="diffmod">Hi</ins> there!</p>';
或者,您也可以首先创建一个Diff
类的实例来配置一些选项
use Ssddanbrown\HtmlDiff\Diff; $diff = new Diff('<p>Hello there!</p>', '<p>Hi there!</p>'); $diff->repeatingWordsAccuracy = 1; $diff->ignoreWhitespaceDifferences = false; $diff->orphanMatchThreshold = 0.2; $output = $diff->build();
选项
$diff->repeatingWordsAccuracy
数字,默认值为1
。有效值从0到1。
定义如何比较重复的单词。此值允许排除一些单词进行比较,从而减少差异算法的总时间。0表示排除所有单词,因此差异将找不到任何匹配的单词。1(默认值)表示所有单词都参与比较,这是最精确的情况。0.5表示任何出现频率超过50%的单词可能被排除在比较之外。这并不意味着这些单词肯定会排除,但只允许在必要时排除它们。
$diff->ignoreWhitespaceDifferences
布尔值。默认值为true
。
如果设置为true,所有空白字符(包括
)都被视为相等。
$diff->orphanMatchThreshold
数字,默认值为0
。有效值从0到1。
如果某些匹配项太小并且离其邻居较远,则被认为是孤立的,并将其删除。此属性定义要考虑为孤立的匹配项的相对大小,范围从0到1。1表示所有匹配项都将被认为是孤立的。0(默认值)表示没有匹配项将被认为是孤立的。0.2表示如果匹配项长度小于其邻居之间距离的20%,则被认为是孤立的。
$diff->addBlockExpression($expression)
添加一个正则表达式,该表达式将用于将文本“分组”在一起,以便将其视为单个块。
传递给方法的$expression
必须是有效的PHP正则表达式模式字符串。
开发
此包构建得非常接近于从c#库移植过来的代码和结构。它将保持与原始发布版本紧密一致,但将来可能会出现偏差。
Psalm被包含用于静态分析。可以像这样运行
./vendor/bin/psalm
PHPUnit用于测试。可以像这样运行
./vendor/bin/phpunit
许可证
此项目,以及从该项目移植出的库,均采用MIT许可证。有关更多信息,请参阅许可证文件。