php 我无法让strpos与newline一起工作

bq9c1y66  于 2023-04-10  发布在  PHP
关注(0)|答案(3)|浏览(116)

我对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'消息。
这段代码有什么问题吗?或者说,修改它,使它能够搜索多行?
先谢谢你。

cx6n0qe3

cx6n0qe31#

当您将搜索词放在新的行中时,您添加的字符在您的比较文件中不存在。例如,当您输入...
狗猫鼠
你实际上是在发送一个字符串,它看起来像...
“狗\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

kxxlusnw

kxxlusnw2#

请看PHP_EOL。这是你需要在字符串中搜索的内容。

mzmfm0qo

mzmfm0qo3#

<?php
$values=explode("\n",$txttofind);
foreach($values as $value)
{
    if (strpos ($s, $value) === false)
    {
        echo "$value : not found <br>";
    }
    else
    {
        echo "$value : found <br>";
    }
}
?>

相关问题