我的PHP diff检查器代码在单个单词上工作得很好,但在句子中不行



我正在编写一个php程序来比较两个长度相等的字符串并突出显示差异。我的代码可以很好地处理单个单词。但是当我输入一个句子进行比较时,它会以不寻常的方式打印出我代码中的html部分。

<form action="#" method="post">
<input type="text" name="first"><br>
<input type="text" name="second"><br>
<input type="submit" name="">
</form>
<?php 
$var1=$_POST['first'];
$var2=$_POST['second'];
echo $var1;
echo "<br>";
$var3=$var2;
$temp =$var2;
$diff_char1='';
for ($i=0;$i<strlen($var1);$i++) { 
// code...
if ($var1[$i]==$var2[$i]) {
// code...
//  echo "true<br>";
}
else{
// code...
$diff_char = substr($var2, $i,1);
//echo"<br>".$diff_char;
$diff_char1='<span style="background:red">'.$diff_char.'</span>';
//echo $diff_char1.'<br>';
$temp= str_replace($diff_char,$diff_char1,$temp);
//echo $temp."<br>";


}
}


echo $temp;

?>

不需要在处理字符串时修改内容,您可以简单地构建一个反映差异的新字符串,并在末尾呈现该字符串以显示差异—可能像这样:

<?php
error_reporting( E_ALL );
?>
<!DOCTYPE html>
<html lang='en'>
<head>
<meta charset='utf-8' />
<title></title>
<style>
output span{color:red}
</style>
</head>
<body>
<form method="post">
<input type="text" name="first" />
<input type="text" name="second" />
<input type="submit" />
</form>
<output>
<?php
if( $_SERVER['REQUEST_METHOD']=='POST' && isset(
$_POST['first'],
$_POST['second']
)){
$first=$_POST['first'];
$second=$_POST['second'];
$message='';

if( substr_compare( $first, $second, 0 )===0 ){
$message='Strings are identical';
} elseif( strlen( $first )!=strlen( $second ) ){
$message='Strings are of different lengths';
}else{
for( $i=0; $i < strlen( $first ); $i++ ){
$chr1=substr($first,$i,1);
$chr2=substr($second,$i,1);
if( $chr1!==$chr2 )$message.=sprintf('<span>%s</span>',$chr2);
else $message.=$chr1;
}
}

echo $message;
}
?>
</output>
</body>
</html>

相关内容