这个类可以查找和查看文本字符串之间的差异。 它有两个文本字符串和使用的差异算法来找出它们之间的差异,并返回一个列表的变化,来修补原来的字符串成为最后的字符串。 PHP 源码与演示: 源码出处演示出处 ?php/* *from:http://www.codepearl.com */require(
这个类可以查找和查看文本字符串之间的差异。
它有两个文本字符串和使用的差异算法来找出它们之间的差异,并返回一个列表的变化,来修补原来的字符串成为最后的字符串。 PHP
源码与演示:源码出处 演示出处

<?php /* *from:http://www.codepearl.com */ require('diff.php'); $before = IsSet($_POST['before']) ? $_POST['before'] : 'Some text before'; $after = IsSet($_POST['after']) ? $_POST['after'] : 'This is the text after'; $mode = (IsSet($_POST['mode']) ? $_POST['mode'] : 'w'); ?> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html lang="en"> <head> <title>Test the Diff Object</title> <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"> <style type="text/css"> * { font-family: sans-serif,arial,helvetica } </style> <body> <form method="POST" action="?"> <div><label for="before">Before</label><br> <textarea id="before" cols="80" rows="10" name="before"><?php echo HtmlSpecialChars($before); ?></textarea></div> <div><label for="after">After</label><br> <textarea id="after" cols="80" rows="10" name="after"><?php echo HtmlSpecialChars($after); ?></textarea></div> <div><input type="submit" name="compare" value="Compare"> by <select name="mode"> <option value="c"<?php if($mode === 'c') echo ' selected'; ?>>Character</option> <option value="w"<?php if($mode === 'w') echo ' selected'; ?>>Word</option> <option value="l"<?php if($mode === 'l') echo ' selected'; ?>>Line</option> </select></div> <?php if(IsSet($_POST['compare'])) { $diff = new diff_class; $difference = new stdClass; $difference->mode = $mode; if($diff->FormatDiffAsHtml($before, $after, $difference)) echo '<div>Difference<br><div style="border-style: solid; border-width: 1px">', $difference->html, '</div></div>'; else echo '<div>Error: ', HtmlSpecialChars($diff->error), '</div>'; } ?> </form> </body> </html>
<?php /* *from:http://www.codepearl.com */ /* {metadocument}<?xml version="1.0" encoding="ISO-8859-1" ?> <class> <package>http://www.codepearl.com</package> <version>@(#) $Id: diff.php,v 1.4 2013/11/06 21:19:07 mlemos Exp $</version> <copyright>Copyright ?(C) http://www.codepearl.com</copyright> <title>OAuth client</title> <author>Manuel Lemos</author> <authoraddress>http://www.codepearl.com</authoraddress> <documentation> <idiom>en</idiom> <purpose>.</purpose> <usage>.</usage> </documentation> {/metadocument} */ class diff_class { var $error = ''; var $insertedStyle = 'font-weight: bold'; var $deletedStyle = 'text-decoration: line-through'; Function SplitString($string, $separators, $end, &$positions) { $l = strlen($string); $split = array(); for($p = 0; $p < $l;) { $e = strcspn($string, $separators.$end, $p); $e += strspn($string, $separators, $p + $e); $split[] = substr($string, $p, $e); $positions[] = $p; $p += $e; if(strlen($end) && ($e = strspn($string, $end, $p))) { $split[] = substr($string, $p, $e); $positions[] = $p; $p += $e; } } $positions[] = $p; return $split; } /* {metadocument} <function> <name>Diff</name> <type>BOOLEAN</type> <documentation> <purpose>.</purpose> <usage>.</usage> </documentation> <argument> <name>before</name> <type>STRING</type> <documentation> <purpose>.</purpose> </documentation> </argument> <argument> <name>after</name> <type>STRING</type> <documentation> <purpose>.</purpose> </documentation> </argument> <argument> <name>difference</name> <type>HASH</type> <out /> <documentation> <purpose>.</purpose> </documentation> </argument> <do> {/metadocument} */ Function Diff($before, $after, &$difference) { $mode = (IsSet($difference->mode) ? $difference->mode : 'c'); switch($mode) { case 'c': $lb = strlen($before); $la = strlen($after); break; case 'w': $before = $this->SplitString($before, " \t", "\r\n", $posb); $lb = count($before); $after = $this->SplitString($after, " \t", "\r\n", $posa); $la = count($after); break; case 'l': $before = $this->SplitString($before, "\r\n", '', $posb); $lb = count($before); $after = $this->SplitString($after, "\r\n", '', $posa); $la = count($after); break; default: $this->error = $mode.' is not a supported more for getting the text differences'; return false; } $diff = array(); for($b = $a = 0; $b < $lb && $a < $la;) { for($pb = $b; $a < $la && $pb < $lb && $after[$a] === $before[$pb]; ++$a, ++$pb); if($pb !== $b) { $diff[] = array( 'change'=>'=', 'position'=>($mode === 'c' ? $b : $posb[$b]), 'length'=>($mode === 'c' ? $pb - $b : $posb[$pb] - $posb[$b]) ); $b = $pb; } if($b === $lb) break; for($pb = $b; $pb < $lb; ++$pb) { for($pa = $a ; $pa < $la && $after[$pa] !== $before[$pb]; ++$pa); if($pa !== $la) break; } if($pb !== $b) { $diff[] = array( 'change'=>'-', 'position'=>($mode === 'c' ? $b : $posb[$b]), 'length'=>($mode === 'c' ? $pb - $b : $posb[$pb] - $posb[$b]) ); $b = $pb; } if($pa !== $a) { $diff[] = array( 'change'=>'+', 'position'=>($mode === 'c' ? $a : $posa[$a]), 'length'=>($mode === 'c' ? $pa - $a : $posa[$pa] - $posa[$a]) ); $a = $pa; } } if($a < $la) { $diff[] = array( 'change'=>'+', 'position'=>($mode === 'c' ? $a : $posa[$a]), 'length'=>($mode === 'c' ? $la - $a : $posa[$la] - $posa[$a]) ); } $difference->difference = $diff; return true; } /* {metadocument} </do> </function> {/metadocument} */ Function FormatDiffAsHtml($before, $after, &$difference) { if(!$this->diff($before, $after, $difference)) { return false; } $html = ''; $insertedStyle = (strlen($this->insertedStyle) ? ' style="'.HtmlSpecialChars($this->insertedStyle).'"' : ''); $deletedStyle = (strlen($this->deletedStyle) ? ' style="'.HtmlSpecialChars($this->deletedStyle).'"' : ''); $td = count($difference->difference); for($d = 0; $d < $td; ++$d) { $diff = $difference->difference[$d]; switch($diff['change']) { case '=': $html .= nl2br(HtmlSpecialChars(substr($before, $diff['position'], $diff['length']))); break; case '-': $html .= '<del'.$deletedStyle.'>'.nl2br(HtmlSpecialChars(substr($before, $diff['position'], $diff['length']))).'</del>'; break; case '+': $html .= '<ins'.$insertedStyle.'>'.nl2br(HtmlSpecialChars(substr($after, $diff['position'], $diff['length']))).'</ins>'; break; default: $this->error = $diff['change'].' is not an expected difference change type'; return false; } } $difference->html = $html; return true; } }; /* {metadocument} </class> {/metadocument} */ ?>


Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Versi Mac WebStorm
Alat pembangunan JavaScript yang berguna

MantisBT
Mantis ialah alat pengesan kecacatan berasaskan web yang mudah digunakan yang direka untuk membantu dalam pengesanan kecacatan produk. Ia memerlukan PHP, MySQL dan pelayan web. Lihat perkhidmatan demo dan pengehosan kami.

SublimeText3 Linux versi baharu
SublimeText3 Linux versi terkini

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma