function check_str($str1,$str2){
static $str_length_flag=1000000000;
static $flag=0;
$tmp_str1=$str1;$tmp_str2=$str2;
$strlen=utf8_strlen($str1);
$str_temp='';
for ($i=0; $i <$strlen ; $i++) {
for ($j=utf8_strlen($str_temp)+1; $j <=$strlen-$i ; $j++)
{
$str_1=mb_substr($str1, $i, $j, 'utf-8');
$str_start=strpos($str2, $str_1);
if (!($str_start===false)) {
if(strlen($str_1)>strlen($str_temp)){
$str_temp=$str_1;
$ex_info=array(
'str1_left'=>$i,
'str1_right'=>$j,
'str2_left'=>$str_start,
'str2_right'=>$str_start+strlen($str_temp),
);
}
if(utf8_strlen($str_1)>=utf8_strlen($str1)||utf8_strlen($str_1)>$str_length_flag){
break 2;
}
}else{
break;
}
}
}
if (!$flag) {
$str_length_flag=utf8_strlen($str_temp);
$flag=1;
}
$res_arr=array();
if (isset($ex_info)) {
$str1_left_str=mb_substr($str1, 0, $ex_info['str1_left'], 'utf-8');
$str2_left_str=substr($str2,0,$ex_info['str2_left']);
if ($str1_left_str&&$str2_left_str) {
$strleft=check_str($str1_left_str,$str2_left_str);
if ($strleft) {
$res_arr=array_merge($res_arr,$strleft);
}
}
if ($str_temp)
{
$res_arr=array_merge($res_arr,array($str_temp));
}
$str1_right_str=mb_substr($str1, $ex_info['str1_left']+$ex_info['str1_right'], utf8_strlen($str1), 'utf-8');
$str2_right_str=substr($str2,$ex_info['str2_right'],strlen($str2));
if ($str1_right_str&&$str2_right_str)
{
$strright=check_str($str1_right_str,$str2_right_str);
if ($strright) {
$res_arr=array_merge($res_arr,$strright);
}
}
}
return $res_arr;
}
function str_color($str1,$str2,$arr){
foreach ($arr as $key => $value) {
$start1=strpos($str1,$value);
$str1=substr_replace($str1, '---$'.$key.'$', $start1,strlen($value));
$start2=strpos($str2,$value);
$str2=substr_replace($str2, '---', $start2,strlen($value));
}
$arr1_temp=explode('---', $str1);
$arr2_temp=explode('---', $str2);
$temp_arr=array();
foreach ($arr1_temp as $key => $value) {
$check=preg_replace('/^\$(\d+)\$$/', '', $value);
if (strlen($check)&&strlen($arr2_temp[$key])) {
$temp_arr[]='<del>'.$arr2_temp[$key].'</del>'.'<ins color="greed">'.$value.'</ins>';
}elseif(strlen($check)){
$temp_arr[]='<ins color="greed">'.$value.'</ins>';
}elseif(strlen($arr2_temp[$key])){
$temp_arr[]='<del>'.$value.$arr2_temp[$key].'</del>';
}else {
$temp_arr[]=$value;
}
}
$temp_arr=preg_replace_callback('/(.*)(\$(\d+)\$)(.*)/', function ($matchs) use($arr){
return $arr[$matchs[3]].$matchs[1].$matchs[4];
}, $temp_arr);
return implode('', $temp_arr);
}
$str1='我叫小明';
$str2='我的名字是小明';
echo "
<style>
ins{
text-decoration: none;
padding: 3px 0;
background:
#EAF0DD;
color: #5B7918;
}
del{text-decoration: line-through;
padding: 3px 0;
background: #f5dfdf;
color: #ac1414;}
</style>
";
echo(str_color($str2,$str1,check_str($str1,$str2)));