首页 > 解决方案 > 我的 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

解决方案


而不是在处理字符串时修改内容,您可以简单地构建一个反映差异的新字符串,并在最后显示差异 - 可能像这样:

<?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>

推荐阅读