2013-01-05 30 views
0

我对PHP非常陌生,无法找到如何解决这个问题。我有一个表单,并希望将一些字符串传递给它,并使用另一个文件进行检查。如果所有字符串都在同一行上,但是一旦我放入多行字符串,就会失败。我无法获得strpos与新行一起工作

我有下面的代码的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'消息。

代码有什么问题,或者无论如何要适应它,以便它能够搜索多行?

预先感谢您。

+0

所以,如果你在两行提交两个词,那么你要同时检查?一个简单的循环会在这里执行 –

+0

你的文件可能使用(说)'\ n'作为行分隔符,但是你的浏览器正在发送'\ r \ n'。 –

+0

从Hanky获得了工作代码。问题已经解决了。感谢Hanky,Dan和Marc。 – user1951663

回答

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>"; 
    } 
} 
?> 
+0

这是只有当你想单独搜索每个输入行 –

+0

我需要搜索完全相同的,而不是我单独。非常感谢Hanky。 – user1951663

+0

这很容易。然后运行自己的代码,但在进行比较之前,请运行$ s = str_replace(“\ r”,“”,$ s);还有$ texttofind = str_replace(“\ r”,“”,$ texttofind); –

0

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

狗 猫鼠

你实际上是发送一个字符串,它看起来像......

“狗\ NCAT \ nrat”

哪里\ n表示字符13或标准非窗口新行字符。这个问题的解决取决于你想要做什么。您可以使用PHP的爆炸函数将输入字符串转换成一个数组,然后获得每个字位置搜索结果...

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

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

现在$位置应该是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一起(傻窗口)。同样我建议阅读如何使用数组,爆炸& 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

+0

非常感谢,丹。 – user1951663

+0

没问题,如果您需要任何帮助,您可以在我的个人资料和我的网站上找到联系详情。 – 2013-01-06 18:06:33

相关问题