我是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'
消息,但是当我输入多行如'dog <enter on keyboard>
cat'并单击提交按钮时,它将返回'not found'
消息。
代码有什么问题或者无论如何要对它进行调整以便它能够搜索多行?
提前谢谢。
答案 0 :(得分:0)
<?php
$values=explode("\n",$txttofind);
foreach($values as $value)
{
if (strpos ($s, $value) === false)
{
echo "$value : not found <br>";
}
else
{
echo "$value : found <br>";
}
}
?>
答案 1 :(得分:0)
当您将搜索词放在新行上时,您将添加比较文件中不存在的字符。例如,当你进入......
狗 猫 鼠
您实际上发送的字符串看起来像......
“狗\ NCAT \ nrat”
其中\ n表示字符13或标准非windows新行字符。解决方法取决于您想要做什么。您可以使用PHP的explode函数搜索结果,将输入字符串转换为数组,然后获取每个单词的位置......
$inputs = explode("\n", $_POST['field']);
$positions = array();
foreach($inputs as $val)
$positions[] = str_pos($compareTo, $val);
现在$ position应该是str_pos的数组,其中包含为每一行找到的数据。
如果您仍在尝试搜索比较文件包含所有文本,您只是不在乎它是否在新行上,您可以简单地删除所有新行字符(同时删除\ r \ n为了安全起见)
$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 \ n所有在一起(愚蠢的窗户)。同样我建议阅读如何使用数组,爆炸&amp; 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