PHP/JS 文本差异
PHP/JS Text Diff
首先,这是这四个问题的精确重复:
- 突出显示 PHP 中两个字符串之间的区别
- 基于 JavaScript 的 diff 实用程序
- 如何使用PHP进行文本差异?
- 在 PHP 中计算文本差异
自从第一次提出这些问题以来,时代似乎已经发生了变化,我想知道现在什么是进行这种比较的好工具?我已经看过(除了这些问题):
- https://github.com/nuxodin/diff_match_patch-php
- http://pear.php.net/package/Text_Diff
- https://github.com/paulgb/simplediff/blob/5bfe1d2a8f967c7901ace50f04ac2d9308ed3169/simplediff.php
- http://www.raymondhill.net/finediff/viewdiff-ex.php
但是我得到的所有那些现在要么是无人保护的,要么看起来有点狡猾,因为它们没有那么多使用(有些甚至暗示它们不是很高性能),梨子让我担心。我讨厌为一个小模块安装 PEAR,不仅如此,而且与 PEAR 相比,似乎从我自己的窗户扔一块砖头来安装这么小的模块,不仅如此,而且该模块已被取代并放置在不同的通道上(不知道为什么?如果PEAR版本是我唯一的选择,我会使用PEAR版本,但我想使用最新的软件包。
有谁知道一个使用良好且当前维护或内置的函数(即使它是PHP扩展)用于PHP和/或JavaScript(JQuery)的文本差异?
好的,已经有一段时间了。
我实际上决定环顾四周,看看其他人使用什么,并偶然发现了Yii(http://www.yiiframework.com)使用的东西。
他们实际上将PEAR模块用于他们的text_diff
,并在部落频道上以新形式使用它。看起来text_diff
现在是一个部落项目,但你可以很容易地将它的一个版本集成到你的应用程序中,这就是 Yii 默认所做的(它预先捆绑了一个版本)。
所以我四处搜索了一下,以了解他们如何使用它以及如何进入它,我遇到了:
public function actionDiff()
{
Yii::import('gii.components.TextDiff');
$model=$this->prepare();
if(isset($_GET['id']) && isset($model->files[$_GET['id']]))
{
$file=$model->files[$_GET['id']];
if(!in_array($file->type,array('php', 'txt','js','css')))
$diff=false;
elseif($file->operation===CCodeFile::OP_OVERWRITE)
$diff=TextDiff::compare(file_get_contents($file->path), $file->content);
else
$diff='';
$this->renderPartial('/common/diff',array(
'file'=>$file,
'diff'=>$diff,
));
}
else
throw new CHttpException(404,'Unable to find the code you requested.');
}
CCodeGenerator
他们的 Gii 模块 ( http://www.yiiframework.com/doc/api/1.1/CCodeGenerator/)。重要的部分是它们实际连接到PEAR模块的位置:
$diff=TextDiff::compare(file_get_contents($file->path), $file->content);
通过读取两个文件的内容,产生diffed
输出。
最初我不想使用 PEAR,因为臃肿,但这个模块对于功能齐全的text_diff
来说非常薄,所以我决定使用它。不仅如此,目前,它是唯一真正为我工作的text_diff
模块,所以我会保持最好的,即使最好的非常需要内存。
您是否在此线程上尝试了菲利普的两个解决方案之一?
此处引用:
在 PHP 中,array_diff 将第一个数组与第二个数组进行比较,并且 返回差额。
$a1 = str_split('abcdefghijklmnop'); $a2 = str_split('abcdefghi'); echo join('', array_diff($a1, $a2)); // jklmnop
这也将起作用:
$s1 = 'abcdefghijklmnop'; $s2 = 'abcdefghi'; echo str_replace(str_split($s2), '', $s1); // jklmnop
这也可以处理
$s2 = 'ghiabcdef';
,因为str_replace()
被喂食 数组,而不是字符串。
- 使用Clipboard.js复制span文本
- 使用JS如何动态更改显示的html文件中的文本背景颜色
- Sails.js:同时发布文本输入和一个文件
- 使用D3.js计算带有字母间距的文本长度
- JS中的按钮和文本输入
- 如何检查链接是否有文本,并根据文本值评估条件-Jquery/JS
- 复选框与文本内联-JS问题
- 在highcharts.js中向点弹出窗口动态添加文本
- 使用JS从选择和文本输入中捕获值,并将输出返回到HTML
- php&js-将电子邮件添加到输入文本中
- 当运行JS函数时,如何在c#中的Edgejs中获取错误文本
- Angular JS-文本框未在独立范围内更新
- 使用D3.js和GeoJson在地图上显示States上的一些文本
- 如何将图像放入我的滚动文本js中
- 如何使用拉斐尔缩放文本.js
- Twitter文本js,不根据包含带#的URL的文本计算长度
- 检查DOM元素和子元素是否包含任何文本[JS或jQuery]
- 更改文本输入上的按钮文本- JS, RoR
- 无法检索按钮文本JS/Jquery
- 无法使用 html 表单和信息框显示默认文本.js