我对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'
消息。
这段代码有什么问题吗?或者说,修改它,使它能够搜索多行?
先谢谢你。
3条答案
按热度按时间cx6n0qe31#
当您将搜索词放在新的行中时,您添加的字符在您的比较文件中不存在。例如,当您输入...
狗猫鼠
你实际上是在发送一个字符串,它看起来像...
“狗\n猫\n鼠”
其中\n表示字符13或标准的非windows新行字符。修复此问题取决于您想要做什么。您可以使用PHP的explode函数将输入字符串转换为数组,然后获取每个单词的位置来搜索结果...
现在$positions应该是一个str_pos的数组,它是为每一行找到的。
如果您仍在尝试搜索比较文件是否包含所有文本,您不关心它是否在新行上,您可以简单地将新行字符全部去掉(为了安全起见,还可以删除\r)
现在输入将是“dogcatrat”。您可以使用str_replace的第二个参数设置空格而不是\n以返回空格分隔的列表。
是的,我们仍然忽略\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
kxxlusnw2#
请看PHP_EOL。这是你需要在字符串中搜索的内容。
mzmfm0qo3#