How to compare text and mark differences using PHP
I was looking for a simple class which will compare to strings and return a result with marked differences. What chars or words where removed and which were added. Just like wiki compare revisions. Actually i googled a lot and finally found a result:
The main class which do mostly all the job is Text_Diff, you can download it from http://pear.php.net/package/Text_Diff/
The other tool I used was http://software.zuavra.net/inline-diff/. It use Text_Diff and render results.
If you have two strings: “my blue pen” and “my red pen”, this is the diff and it will produce: “my <del>blue</del><ins>red</ins> pen”.
It does the following:
- takes two strings
- splits each of them into arrays containing one character per entry
- considers the two arrays to be “lines” and uses Text_Diff from PEAR to compute a diff
- it uses my own diff renderer which extends the one from Text_Diff and renders the differences “inline” using <del></del> and <ins></ins> to mark them. These tags are customizable.
- finally, it returns the string consisting of the two originals mashed together, with the inline diffs applied.
Result example:
If you have two strings: “my blue pen” and “my red pen”, this is the diff and it will produce: “my bluered pen”.
thanks
Good article, the advertisment is sold?
Hi i can’t take output formatted string into one variable. I have been using text_diff of pear. I don’t know how to convert formatted string of text_diff output to a string because i ưant to foist it in to $string.
please, help me.
include_once 'inline_function.php';
$nl = '#**!)@#';
$text_with_marked_differences = inline_diff($original_text, $modified_text, $nl);
When I use:
include_once ‘inline_function.php’;
$nl = ‘#**!)@#’;
$a = ’1 1′;
$b = ’1 2′;
$differences = inline_diff($a, $b, $nl);
The output of $differences is already shown on the screen, and i dont put echo before it. Can it save the output to the variable instead?.
I want to use $differences later on in my php code by using:
$message = str_replace(‘{content}’, $differences, $message);
echo $message;
Is this possible? I think it has something to do with echo “$line “; in inline_renderer.php.
I hope you can help me.
For me there’s nothing shown on screen. I copy/pasted my code where I use it. I don’t know where is your problem.
lenselijer,
I’ve got the same problem as you (it echoes before going to variable and the variable is then empty).
Did you find a solution ? If so, what was it ?
Thx !
There’s an easy solution to this problem:
Hope this helps ;)
?>
Hmm… it appears this comment box strips tags, including my PHP example. Here it is again, without PHP tags.
Thanks, used :)
But Text_Diff has many warnings in PHP5
Hello,
the site http://software.zuavra.net/inline-diff/ which contains function Text_Diff, does not exist..
can anyone send me the function for comparing two PHP texts?
Please upload it on some shararing server like sendspace.com
Thanks A LOT.
+1 to pavel.
$stringA = “hello world hello world helloo world”;
$stringB = “hello php hello php hello php”;
echo “string 1—->”.$stringA.”";
echo “string 2—->”.$stringB.”";
$array1 = explode(‘ ‘, $stringA);
$array2 = explode(‘ ‘, $stringB);
$result = array_diff($array2, $array1);
$zem= implode(‘ ‘,$result);
if (!empty($zem)) {
echo “string diffrence—> “.$zem.”";
}
else {
echo “string diffrence—>both strings are same “;
}
$a = count(explode(‘ ‘, $stringA));
$b= count(explode(” “, $zem));
similar_text($stringA, $stringB , $p);
echo ” similarity between the stirng is Percent:”.$p.”% “;