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 页面并只输入 dog 或 cat 时,它会很好并显示'found'消息,但是当我输入多行(如“dog <enter on keyboard>cat”)并单击提交按钮时,它会返回'not found'消息。

代码有什么问题,或者无论如何要对其进行调整以便能够搜索多行?

先感谢您。

4

2 回答 2

0

当您将搜索词放在新行上时,您正在添加比较文件中不存在的字符。比如当你进入...

狗猫老鼠

您实际上正在发送一个看起来像...的字符串

“狗\n猫\n老鼠”

其中 \n 表示字符 13 或标准的非 Windows 换行符。对此的修复取决于您想要做什么。您可以使用 PHP 的 explode 函数搜索结果,将输入字符串转换为数组,然后获取每个单词的位置...

$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 的第二个参数来设置空格而不是 \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 回答