<?php
header('Content-type:text/html;charset=utf-8;');
$str1='哈哈哈213213sdfsdf';
$str2='test哈哈';
echo $str1;
echo "<br/>";
echo $str2;
echo "<br/>";
//echo mb_substr($str1, 5, utf8_strlen($str1)-5, 'utf-8');die();
// 计算中文字符串长度,这个函数是在网上搜的,忘记网址了......
function utf8_strlen($string = null) {
// 将字符串分解为单元
preg_match_all('/./us', $string, $match);
// 返回单元个数
return count($match[0]);
}
//检测字符串相同的部分
function check_str($str1,$str2){
$strlen=utf8_strlen($str1);
$str_temp='';
for ($i=0; $i <$strlen ; $i++) {
for ($j=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),
);
}
}
}
}
$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[]='<font color="pink">'.$value.'</font>'.'<font color="#C1CDCD">'.$arr2_temp[$key].'</font>';//修改
}elseif(strlen($check)){
$temp_arr[]='<font color="#BFEFFF">'.$value.'</font>';//新加的
}elseif(strlen($arr2_temp[$key])){
$temp_arr[]='<font color="red">'.$value.$arr2_temp[$key].'</font>';//删除的
}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);
}
echo(str_color($str2,$str1,check_str($str1,$str2)));
?>
优化了下上面的函数
文章地址
http://blog.youkuaiyun.com/scchary/article/details/45337729