Here is a string resynch function:<?phpfunction str_resynch($a,$b,$l=32,$s=2048) { $r=array(); for($i=0,$c=strlen($a),$cc=strlen($b),$ii=0,$z=$s-1,$z2=($z<<1)+1; $i<$c; $i++) { $d=$i-$z; $d=($d<$ii)?substr($b,$ii,$z2-$ii+$d):substr($b,$d,$z2); $p=strpos($d,$a{$i}); $n=0; while ($p!==FALSE) { $m=1; $bi=$i; $bp=$p; $p+=$ii; while ((++$i<$c) && (++$p<$cc)) { if ($a{$i}!=$b{$p}) break; $m++; } if ($m<$l) { $i=$bi; $n=$bp+1; $p=@strpos($d,$a{$i},$n); } else { $i--; $r[]=array($bi,$bp+$ii,$m); $ii=$p; break; } } } if (!count($r)) return ($cc)?array('/',0,$c,0,$cc):array(array('+',0,$c,0,0)); $o=array(); $bi=0; $bp=0; for($i=0,$m=count($r);$i<$m;$i++) { if ($r[$i][0]!=$bi) { if ($r[$i][1]!=$bp) { $o[]=array('/',$bi,$r[$i][0]-$bi,$bp,$r[$i][1]-$bp); $bi=$r[$i][0]; $bp=$r[$i][1]; } else { $o[]=array('+',$bi,$r[$i][0]-$bi,$bp,0); $bi=$r[$i][0]; } } elseif ($r[$i][1]!=$bp) { $o[]=array('-',$bi,0,$bp,$r[$i][1]-$bp); $bp=$r[$i][1]; } $o[]=array('=',$r[$i][0],$r[$i][2],$r[$i][1],$r[$i][2]); $bi+=$r[$i][2]; $bp+=$r[$i][2]; } if ($c!=$bi) { if ($cc!=$bp) $o[]=array('/',$bi,$c-$bi,$bp,$cc-$bp); else $o[]=array('+',$bi,$c-$bi,$bp,0); } elseif ($cc!=$bp) $o[]=array('-',$bi,0,$bp,$cc-$bp); return $o;}?>