php - 我的 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>