1

私はphpに非常に慣れていないので、これを修正する方法を見つけることができません。フォームがあり、それに文字列を渡して、別のファイルでチェックしてもらいたいです。すべての文字列が同じ行にある場合は正常に機能していますが、複数行の文字列を入力するとすぐに失敗します。

次のコードを含むphpファイルがあります。

<?php
echo "<center><form method='post' enctype='multipart/form-data'>";
echo "<b></b><textarea name='texttofind' cols='80' rows='10'></textarea><br>";
echo "<input name='submit' type='submit' style='width:80px' value='Run' />";
echo "</form></center>";

$texttofind = $_POST['texttofind'];
if(get_magic_quotes_gpc()) {
    $texttofind = stripslashes($texttofind);
}
$texttofind = html_entity_decode($texttofind);
$s = file_get_contents ("/home/xxxxx/public_html/abc.txt");
if (strpos ($s, $texttofind) === false) {
    echo "not found";
}
else
    echo "found";
?>

そしてabc.txtで、私は持っています

dog  
cat  
rat

PHPページを開いて、犬または猫だけを入力すると、問題'found'なくメッセージが表示されますが、「犬の<enter on keyboard>猫」のように複数行入力して送信ボタンをクリックすると、'not found'メッセージが表示されます。

コードの何が問題になっていますか、またはとにかく複数の行を検索できるようにコードを適応させるのは何が問題ですか?

前もって感謝します。

4

2 に答える 2

0

検索語を新しい行に配置すると、比較ファイルに存在しない文字が追加されます。例えば入ると…

犬猫ネズミ

あなたは実際に次のような文字列を送信しています...

「犬\n猫\nネズミ」

\n は文字 13 または Windows 以外の標準の改行文字を意味します。これに対する修正は、何をしたいかによって異なります。PHP の爆発関数を使用して結果を検索し、入力文字列を配列に変換してから、各単語の位置を取得できます...

$inputs = explode("\n", $_POST['field']);
$positions = array();

foreach($inputs as $val)
    $positions[] = str_pos($compareTo, $val);

$positions は、各行で見つかった str_pos の配列である必要があります。

比較ファイルにすべてのテキストが含まれていることをまだ検索しようとしている場合は、それが新しい行にあるかどうかは気にしません。改行文字をすべて一緒に取り除くことができます (\r を削除して、安全)

$inputs = str_replace("\n", "", $_POST['field']);
$inputs = str_replace("\r", "", $inputs);

入力は「dogcatrat」になります。str_replace の 2 番目の引数を使用して、\n の代わりにスペースを設定し、スペース区切りのリストに戻すことができます。

$inputs = str_replace("\n", " ", $_POST['field']);
$inputs = str_replace("\r", "", $inputs);

はい、まだ \r を無視しています (ばかげたウィンドウ)。それでも、配列の使用方法、explode & implode、str_replace を読むことをお勧めします。多くの人がこれについてコメントし、str_replace は良くないので正規表現を学ぶべきだと言うでしょう。経験豊富な開発者として、正規表現の置換が単純な文字置換でより優れた機能を提供するケースはほとんどなく、コマンドの完全に新しい言語を学ぶことになります。今のところ、正規表現を使用するように言う人は無視してください。ただし、近い将来、正規表現を確実に学習してください。このような性質のものではなく、最終的には必要になります。

http://php.net/manual/en/language.types.array.php

http://php.net/manual/en/function.explode.php

http://php.net/manual/en/function.implode.php

http://php.net/manual/en/function.str-replace.php

http://php.net/manual/en/function.preg-match.php

于 2013-01-05T19:55:30.093 に答える
-1
<?php
$values=explode("\n",$txttofind);
foreach($values as $value)
{
    if (strpos ($s, $value) === false)
    {
        echo "$value : not found <br>";
    }
    else
    {
        echo "$value : found <br>";
    }
}
?>
于 2013-01-05T19:51:54.453 に答える