2013-01-05 28 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

相關問題